1 import { NO_ERRORS_SCHEMA } from '@angular/core';
2 import { async, ComponentFixture } from '@angular/core/testing';
3 import { NgxsModule, Store } from '@ngxs/store';
4 import { Observable } from 'rxjs';
5 import { Mock } from 'ts-mockery';
6 import { ConfigureFn, configureTests } from '../../../../../jest/test-config.helper';
7 import { Service } from '../../../../models/components/service';
8 import { Resource } from '../../../../models/components/resource';
9 import { GroupInstance } from '../../../../models/graph/zones/group-instance';
10 import { PolicyInstance } from '../../../../models/graph/zones/policy-instance';
11 import { ArtifactGroupType, ResourceType } from '../../../../utils/constants';
12 import { WorkspaceState } from '../../../store/states/workspace.state';
13 import { CompositionPanelComponent } from './composition-panel.component';
14 import { ArtifactsTabComponent } from './panel-tabs/artifacts-tab/artifacts-tab.component';
15 import { GroupMembersTabComponent } from './panel-tabs/group-members-tab/group-members-tab.component';
16 import { GroupOrPolicyPropertiesTab } from './panel-tabs/group-or-policy-properties-tab/group-or-policy-properties-tab.component';
17 import { InfoTabComponent } from './panel-tabs/info-tab/info-tab.component';
18 import { PolicyTargetsTabComponent } from './panel-tabs/policy-targets-tab/policy-targets-tab.component';
19 import { PropertiesTabComponent } from './panel-tabs/properties-tab/properties-tab.component';
20 import { ReqAndCapabilitiesTabComponent } from './panel-tabs/req-capabilities-tab/req-capabilities-tab.component';
22 describe('composition-panel component', () => {
24 let fixture: ComponentFixture<CompositionPanelComponent>;
28 infoTab : {titleIcon: 'info-circle', component: InfoTabComponent, input: {}, isActive: true, tooltipText: 'Information'},
30 titleIcon: 'settings-o', component: GroupOrPolicyPropertiesTab, input: {type: 'policy'}, isActive: false, tooltipText: 'Properties'
32 policyTargets: {titleIcon: 'inputs-o', component: PolicyTargetsTabComponent, input: {}, isActive: false, tooltipText: 'Targets'},
33 groupMembers: {titleIcon: 'inputs-o', component: GroupMembersTabComponent, input: {}, isActive: false, tooltipText: 'Members'},
35 titleIcon: 'settings-o', component: GroupOrPolicyPropertiesTab, input: {type: 'group'}, isActive: false, tooltipText: 'Properties'
37 deploymentArtifacts: {
38 titleIcon: 'deployment-artifacts-o', component: ArtifactsTabComponent,
39 input: { type: ArtifactGroupType.DEPLOYMENT}, isActive: false, tooltipText: 'Deployment Artifacts'
42 titleIcon: 'api-o', component: ArtifactsTabComponent,
43 input: { type: ArtifactGroupType.SERVICE_API}, isActive: false, tooltipText: 'API Artifacts'
46 titleIcon: 'info-square-o', component: ArtifactsTabComponent,
47 input: { type: ArtifactGroupType.INFORMATION}, isActive: false, tooltipText: 'Information Artifacts'
50 titleIcon: 'settings-o', component: PropertiesTabComponent,
51 input: {title: 'Properties and Attributes'}, isActive: false, tooltipText: 'Properties'
53 reqAndCapabilities : {
54 titleIcon: 'req-capabilities-o', component: ReqAndCapabilitiesTabComponent, input: {},
55 isActive: false, tooltipText: 'Requirements and Capabilities'
57 inputs: {titleIcon: 'inputs-o', component: PropertiesTabComponent, input: {title: 'Inputs'}, isActive: false, tooltipText: 'Inputs'},
58 settings: {titleIcon: 'settings-o', component: PropertiesTabComponent, input: {}, isActive: false, tooltipText: 'Settings'},
64 const configure: ConfigureFn = (testBed) => {
65 testBed.configureTestingModule({
66 declarations: [CompositionPanelComponent],
67 imports: [NgxsModule.forRoot([WorkspaceState])],
68 schemas: [NO_ERRORS_SCHEMA],
73 configureTests(configure).then((testBed) => {
74 fixture = testBed.createComponent(CompositionPanelComponent);
75 store = testBed.get(Store);
80 it('When PolicyInstance Selected => Expect (info, policyTargets and policyProperties) tabs appear', () => {
82 const testInstance = new PolicyInstance();
84 fixture.componentInstance.initTabs(testInstance);
86 expect (fixture.componentInstance.tabs.length).toBe(3);
87 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
88 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.policyTargets);
89 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.policyProperties);
92 it('should match current snapshot of composition-panel component.', () => {
93 expect(fixture).toMatchSnapshot();
96 it('When Topology Template is Service and no instance is selected Expect (info, deployment, inputs, info and api)', () => {
98 const selectedComponent: Service = new Service(null, null);
99 selectedComponent.isResource = jest.fn(() => false);
100 selectedComponent.isService = jest.fn(() => true );
102 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
104 // const pnfMock = Mock.of<Service>({ isResource : () => false });
105 fixture.componentInstance.topologyTemplate = selectedComponent;
108 fixture.componentInstance.ngOnInit();
111 expect (fixture.componentInstance.tabs.length).toBe(6);
112 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
113 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
114 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.inputs);
115 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
116 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.apiArtifacts);
120 it('When Topology Template is Resource and no instance is selected Expect (info, deployment, inputs, info and api)', () => {
122 const selectedComponent: Service = new Service(null, null);
123 selectedComponent.isResource = jest.fn(() => true);
124 selectedComponent.isService = jest.fn(() => false );
126 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
128 fixture.componentInstance.topologyTemplate = selectedComponent;
131 fixture.componentInstance.ngOnInit();
134 expect (fixture.componentInstance.tabs.length).toBe(5);
135 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
136 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
137 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.properties);
138 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
139 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.reqAndCapabilities);
143 it('When Topology Template is Service and proxyService instance is selected ' +
144 'Expect (info, deployment, inputs, info and api)', () => {
146 const selectedComponent: Service = new Service(null, null);
147 selectedComponent.isResource = jest.fn(() => false);
148 selectedComponent.isService = jest.fn(() => true );
150 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
151 fixture.componentInstance.selectedComponentIsServiceProxyInstance = jest.fn(() => true);
153 // const pnfMock = Mock.of<Service>({ isResource : () => false });
154 fixture.componentInstance.topologyTemplate = selectedComponent;
157 fixture.componentInstance.ngOnInit();
160 expect (fixture.componentInstance.tabs.length).toBe(5);
161 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
162 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.properties);
163 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.reqAndCapabilities);
167 it('When Topology Template is Resource and VL is selected ' +
168 'Expect (info, deployment, inputs, info and api)', () => {
170 const topologyTemplate: Resource = new Resource(null, null);
171 topologyTemplate.isResource = jest.fn(() => true);
172 topologyTemplate.isService = jest.fn(() => false );
174 const vlMock = Mock.of<Resource>({ resourceType : 'VL', isResource : () => true, isService : () => false });
175 fixture.componentInstance.store.select = jest.fn(() => Observable.of(vlMock));
177 fixture.componentInstance.topologyTemplate = topologyTemplate;
180 fixture.componentInstance.ngOnInit();
183 expect (fixture.componentInstance.tabs.length).toBe(5);
184 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
185 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
186 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.properties);
187 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
188 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.reqAndCapabilities);
192 it('When Topology Template is Service and VL is selected ' +
193 'Expect (info, deployment, inputs, info and api)', () => {
195 const topologyTemplate: Service = new Service(null, null);
196 topologyTemplate.isResource = jest.fn(() => true);
197 topologyTemplate.isService = jest.fn(() => false );
199 const vlMock = Mock.of<Resource>({ resourceType : 'VL', isResource : () => true, isService : () => false });
200 fixture.componentInstance.store.select = jest.fn(() => Observable.of(vlMock));
202 fixture.componentInstance.topologyTemplate = topologyTemplate;
205 fixture.componentInstance.ngOnInit();
208 expect (fixture.componentInstance.tabs.length).toBe(5);
209 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
210 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
211 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.properties);
212 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
213 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.reqAndCapabilities);
217 it('When GroupInstance Selected => Expect (info, groupMembers and groupProperties) tabs appear.', () => {
219 const testInstance = new GroupInstance();
220 fixture.componentInstance.initTabs(testInstance);
222 expect (fixture.componentInstance.tabs.length).toBe(3);
223 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
224 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.groupMembers);
225 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.groupProperties);