import React from 'react';
import { shallow, mount } from 'enzyme';
import {Provider} from 'react-redux'
import configureStore from 'redux-mock-store';
import Table from 'react-bootstrap/lib/Table';
import ConnectedSelectedNodeDetails, { SelectedNodeDetails } from 'app/tierSupport/selectedNodeDetails/SelectedNodeDetails.jsx';
import { SELECTED_NODE_TABLE_COLUMN_NAMES } from 'app/tierSupport/selectedNodeDetails/SelectedNodeDetailsConstants.js';
import LaunchInContext from 'app/tierSupport/launchExternalResource/LaunchExternalResource.jsx';
describe('SelectedNodeDetails - Shallow render of component', () => {
let wrapper;
const nodeTypeProp = 'VNF';
const uidProp = 'SomeValidUIDName';
const nodeDataProp = {
'interface-role': 'MPLS',
'in-maint': 'false',
'interface-type': 'WAN',
'port-description': 'MPLS port on 10_NSG16_location4',
'resource-version': '123456789',
'interface-name': '10_port1_location4',
'uri': 'network/pnfs/pnf/10_NSG14_location4/p-interfaces/p-interface/10_port1_location4'
};
beforeEach( () => {
wrapper = shallow(
);
})
it('Render basic component', () => {
expect(wrapper.length).toEqual(1);
});
it('Verify node type is displayed as a header', () => {
expect(wrapper.contains(
{nodeTypeProp}
)).toBe(true);
expect(wrapper.find('h2')).toHaveLength(1);
});
it('Verify uid is displayed', () => {
expect(wrapper.contains({uidProp} )).toBe(true);
});
it('Verify node data table is displayed', () => {
// verify table has a row for each node data prop plus one row for the column headers
expect(wrapper.find(Table)).toHaveLength(1);
expect(wrapper.find(Table).props().bsClass).toEqual('ts-selected-node-table');
expect(wrapper.find(Table).children()).toHaveLength(2); // thead and tbody
// validate the table header content
expect(wrapper.find('thead')).toHaveLength(1);
let cellClassName;
for (let index = 1; index <= SELECTED_NODE_TABLE_COLUMN_NAMES.length; index++) {
cellClassName = (index % 2 ? 'left-column-cell' : 'right-column-cell');
expect(wrapper.contains(
{SELECTED_NODE_TABLE_COLUMN_NAMES[index-1]} |
)).toBe(true);
}
// validate the table body content
expect(wrapper.find('tbody')).toHaveLength(1);
expect(wrapper.find('tbody').children()).toHaveLength(7); // 1 row for each of the 7 properties
for (let prop in nodeDataProp) {
expect(wrapper.contains(
{prop} |
)).toBe(true);
expect(wrapper.contains(
{nodeDataProp[prop]} |
)).toBe(true);
}
});
})
describe('SelectedNodeDetails - Shallow render of component with no node data', () => {
let wrapper;
const nodeTypeProp = 'VNF';
const uidProp = 'SomeValidUIDName';
const nodeDataProp = {};
beforeEach( () => {
wrapper = shallow(
);
})
it('Render basic component', () => {
expect(wrapper.length).toEqual(1);
});
it('Verify node data table is hidden', () => {
// verify table is hidden
expect(wrapper.find(Table)).toHaveLength(1);
expect(wrapper.find(Table).props().bsClass).toEqual('hidden');
});
})
describe('SelectedNodeDetails - Render React Component (wrapped in )', () => {
const initialState = {
tierSupport: {
launchExternalResourceReducer: {
externalResourcePayload: {}
},
selectedNodeDetails: {
nodeType: 'VNF',
uid: 'AAI/CLYMR/000509/SD_WAN',
nodeData: {
'interface-role': 'MPLS',
'in-maint': 'false',
'interface-type': 'WAN',
'port-description': 'MPLS port on 10_NSG16_location4',
'resource-version': '123456789',
'interface-name': '10_port1_location4',
'uri': 'network/pnfs/pnf/10_NSG14_location4/p-interfaces/p-interface/10_port1_location4'
}
}
}
};
const mockStore = configureStore();
let store, wrapper;
beforeEach( () => {
store = mockStore(initialState);
wrapper = mount();
})
it('Render the connected component', () => {
expect(wrapper.find(ConnectedSelectedNodeDetails).length).toEqual(1);
});
it('Validate props from store', () => {
expect(wrapper.find(SelectedNodeDetails).props().uid).toEqual(initialState.tierSupport.selectedNodeDetails.uid);
expect(wrapper.find(SelectedNodeDetails).props().nodeType).toEqual(initialState.tierSupport.selectedNodeDetails.nodeType);
expect(wrapper.find(SelectedNodeDetails).props().nodeData).toEqual(initialState.tierSupport.selectedNodeDetails.nodeData);
});
})