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 } 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';
21 import {SubstitutionFilterTabComponent} from "./panel-tabs/substitution-filter-tab/substitution-filter-tab.component";
22 import {InterfaceOperationsComponent} from "../interface-operatons/interface-operations.component";
24 describe('composition-panel component', () => {
26 let fixture: ComponentFixture<CompositionPanelComponent>;
31 titleIcon: 'info-circle',
32 component: InfoTabComponent,
35 tooltipText: 'Information',
36 testId: 'detail-tab-information'
39 titleIcon: 'settings-o',
40 component: GroupOrPolicyPropertiesTab,
41 input: {type: 'policy'},
43 tooltipText: 'Properties',
44 testId: 'detail-tab-policy-properties'
47 titleIcon: 'inputs-o',
48 component: PolicyTargetsTabComponent,
51 tooltipText: 'Targets',
52 testId: 'detail-tab-policy-targets'
55 titleIcon: 'inputs-o',
56 component: GroupMembersTabComponent,
59 tooltipText: 'Members',
60 testId: 'detail-tab-group-members'
63 titleIcon: 'settings-o',
64 component: GroupOrPolicyPropertiesTab,
65 input: {type: 'group'},
67 tooltipText: 'Properties',
68 testId: 'detail-tab-group-properties'
70 deploymentArtifacts: {
71 titleIcon: 'deployment-artifacts-o',
72 component: ArtifactsTabComponent,
73 input: {type: ArtifactGroupType.DEPLOYMENT},
75 tooltipText: 'Deployment Artifacts',
76 testId: 'detail-tab-deployment-artifacts'
80 component: ArtifactsTabComponent,
81 input: {type: ArtifactGroupType.SERVICE_API},
83 tooltipText: 'API Artifacts',
84 testId: 'detail-tab-api-artifacts'
87 titleIcon: 'info-square-o',
88 component: ArtifactsTabComponent,
89 input: {type: ArtifactGroupType.INFORMATION},
91 tooltipText: 'Information Artifacts',
92 testId: 'detail-tab-information-artifacts'
95 titleIcon: 'settings-o', component: PropertiesTabComponent,
96 input: {title: 'Properties and Attributes'}, isActive: false, tooltipText: 'Properties',
97 testId: 'detail-tab-properties-attributes'
100 titleIcon: 'req-capabilities-o', component: ReqAndCapabilitiesTabComponent, input: {},
101 isActive: false, tooltipText: 'Requirements and Capabilities',
102 testId: 'detail-tab-requirements-capabilities'
104 substitutionFilter: {
105 titleIcon: 'composition-o',
106 component: SubstitutionFilterTabComponent,
107 input: {title: 'SUBSTITUTION FILTER'},
109 tooltipText: 'Substitution Filter',
110 testId: 'detail-tab-substitution-filter'
113 titleIcon: 'inputs-o',
114 component: PropertiesTabComponent,
115 input: {title: 'Inputs'},
117 tooltipText: 'Inputs',
118 testId: 'detail-tab-inputs'
121 titleIcon: 'settings-o',
122 component: PropertiesTabComponent,
125 tooltipText: 'Settings',
126 testId: 'detail-tab-settings'
128 interfaceOperations: {
129 titleIcon: 'composition-o',
130 component: InterfaceOperationsComponent,
131 input: {title: 'Interface Operations'},
133 tooltipText: 'Interface Operations',
134 testId: 'detail-tab-interface-operations'
141 const configure: ConfigureFn = (testBed) => {
142 testBed.configureTestingModule({
143 declarations: [CompositionPanelComponent],
144 imports: [NgxsModule.forRoot([WorkspaceState])],
145 schemas: [NO_ERRORS_SCHEMA],
150 configureTests(configure).then((testBed) => {
151 fixture = testBed.createComponent(CompositionPanelComponent);
152 store = testBed.get(Store);
157 it('When PolicyInstance Selected => Expect (info, policyTargets and policyProperties) tabs appear', () => {
159 const testInstance = new PolicyInstance();
161 fixture.componentInstance.initTabs(testInstance);
162 expect (fixture.componentInstance.tabs.length).toBe(3);
163 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
164 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.policyTargets);
165 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.policyProperties);
168 it('should match current snapshot of composition-panel component.', () => {
169 expect(fixture).toMatchSnapshot();
172 it('When Topology Template is Service and no instance is selected Expect tabs info, deployment, inputs, info, api, substitution filter', () => {
173 const selectedComponent: Service = new Service(null, null);
174 selectedComponent.isResource = jest.fn(() => false);
175 selectedComponent.isService = jest.fn(() => true);
176 selectedComponent.isSubstituteCandidate = jest.fn(() => true);
177 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
179 fixture.componentInstance.topologyTemplate = selectedComponent;
182 fixture.componentInstance.ngOnInit();
185 expect(fixture.componentInstance.tabs.length).toBe(6);
186 expect(fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
187 expect(fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
188 expect(fixture.componentInstance.tabs[2]).toEqual(tabs.inputs);
189 expect(fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
190 expect(fixture.componentInstance.tabs[4]).toEqual(tabs.apiArtifacts);
191 expect(fixture.componentInstance.tabs[5]).toEqual(tabs.substitutionFilter);
195 it('When Topology Template is Service without base type, and no instance is selected. Expect tabs info, deployment, inputs, info and api', () => {
197 const selectedComponent: Service = new Service(null, null);
198 selectedComponent.isResource = jest.fn(() => false);
199 selectedComponent.isService = jest.fn(() => true);
200 selectedComponent.isSubstituteCandidate = jest.fn(() => false);
201 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
203 fixture.componentInstance.topologyTemplate = selectedComponent;
206 fixture.componentInstance.ngOnInit();
209 expect(fixture.componentInstance.tabs.length).toBe(5);
210 expect(fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
211 expect(fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
212 expect(fixture.componentInstance.tabs[2]).toEqual(tabs.inputs);
213 expect(fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
214 expect(fixture.componentInstance.tabs[4]).toEqual(tabs.apiArtifacts);
218 it('When Topology Template is Resource and no instance is selected Expect (info, deployment, inputs, info and api)', () => {
220 const selectedComponent: Service = new Service(null, null);
221 selectedComponent.isResource = jest.fn(() => true);
222 selectedComponent.isService = jest.fn(() => false );
224 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
226 fixture.componentInstance.topologyTemplate = selectedComponent;
229 fixture.componentInstance.ngOnInit();
232 expect (fixture.componentInstance.tabs.length).toBe(5);
233 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
234 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
235 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.properties);
236 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
237 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.reqAndCapabilities);
241 it('When Topology Template is Service and proxyService instance is selected ' +
242 'Expect (info, deployment, inputs, info and api)', () => {
244 const selectedComponent: Service = new Service(null, null);
245 selectedComponent.isResource = jest.fn(() => false);
246 selectedComponent.isService = jest.fn(() => true );
247 selectedComponent.isSubstituteCandidate = jest.fn(() => true );
249 fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
250 fixture.componentInstance.selectedComponentIsServiceProxyInstance = jest.fn(() => true);
252 fixture.componentInstance.topologyTemplate = selectedComponent;
255 fixture.componentInstance.ngOnInit();
258 expect (fixture.componentInstance.tabs.length).toBe(7);
259 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
260 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.properties);
261 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.reqAndCapabilities);
262 expect (fixture.componentInstance.tabs[6]).toEqual(tabs.interfaceOperations);
266 it('When Topology Template is Resource and VL is selected ' +
267 'Expect (info, deployment, inputs, info and api)', () => {
269 const topologyTemplate: Resource = new Resource(null, null);
270 topologyTemplate.isResource = jest.fn(() => true);
271 topologyTemplate.isService = jest.fn(() => false );
273 const vlMock = Mock.of<Resource>({ resourceType : 'VL', isResource : () => true, isService : () => false });
274 fixture.componentInstance.store.select = jest.fn(() => Observable.of(vlMock));
276 fixture.componentInstance.topologyTemplate = topologyTemplate;
279 fixture.componentInstance.ngOnInit();
282 expect (fixture.componentInstance.tabs.length).toBe(6);
283 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
284 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
285 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.properties);
286 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
287 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.reqAndCapabilities);
291 it('When Topology Template is Service and VL is selected ' +
292 'Expect (info, deployment, inputs, info and api)', () => {
294 const topologyTemplate: Service = new Service(null, null);
295 topologyTemplate.isResource = jest.fn(() => true);
296 topologyTemplate.isService = jest.fn(() => false );
298 const vlMock = Mock.of<Resource>({ resourceType : 'VL', isResource : () => true, isService : () => false });
299 fixture.componentInstance.store.select = jest.fn(() => Observable.of(vlMock));
301 fixture.componentInstance.topologyTemplate = topologyTemplate;
304 fixture.componentInstance.ngOnInit();
307 expect (fixture.componentInstance.tabs.length).toBe(5);
308 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
309 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.deploymentArtifacts);
310 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.properties);
311 expect (fixture.componentInstance.tabs[3]).toEqual(tabs.infoArtifacts);
312 expect (fixture.componentInstance.tabs[4]).toEqual(tabs.reqAndCapabilities);
316 it('When GroupInstance Selected => Expect (info, groupMembers and groupProperties) tabs appear.', () => {
318 const testInstance = new GroupInstance();
319 fixture.componentInstance.initTabs(testInstance);
321 expect (fixture.componentInstance.tabs.length).toBe(3);
322 expect (fixture.componentInstance.tabs[0]).toEqual(tabs.infoTab);
323 expect (fixture.componentInstance.tabs[1]).toEqual(tabs.groupMembers);
324 expect (fixture.componentInstance.tabs[2]).toEqual(tabs.groupProperties);