Fix for substitution filter properties
[sdc.git] / catalog-ui / src / app / ng2 / pages / composition / panel / composition-panel.component.spec.ts
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';
21
22 describe('composition-panel component', () => {
23
24     let fixture: ComponentFixture<CompositionPanelComponent>;
25     let store: Store;
26
27     const tabs = {
28             infoTab : {titleIcon: 'info-circle', component: InfoTabComponent, input: {}, isActive: true, tooltipText: 'Information'},
29             policyProperties: {
30                 titleIcon: 'settings-o', component: GroupOrPolicyPropertiesTab, input: {type: 'policy'}, isActive: false, tooltipText: 'Properties'
31             },
32             policyTargets: {titleIcon: 'inputs-o', component: PolicyTargetsTabComponent, input: {}, isActive: false, tooltipText: 'Targets'},
33             groupMembers: {titleIcon: 'inputs-o', component: GroupMembersTabComponent, input: {}, isActive: false, tooltipText: 'Members'},
34             groupProperties: {
35                 titleIcon: 'settings-o', component: GroupOrPolicyPropertiesTab, input: {type: 'group'}, isActive: false, tooltipText: 'Properties'
36             },
37             deploymentArtifacts: {
38                 titleIcon: 'deployment-artifacts-o', component: ArtifactsTabComponent,
39                 input: { type: ArtifactGroupType.DEPLOYMENT}, isActive: false, tooltipText: 'Deployment Artifacts'
40             },
41             apiArtifacts: {
42                 titleIcon: 'api-o', component: ArtifactsTabComponent,
43                 input: { type:  ArtifactGroupType.SERVICE_API}, isActive: false, tooltipText: 'API Artifacts'
44             },
45             infoArtifacts: {
46                 titleIcon: 'info-square-o', component: ArtifactsTabComponent,
47                 input: { type: ArtifactGroupType.INFORMATION}, isActive: false, tooltipText: 'Information Artifacts'
48             },
49             properties: {
50                 titleIcon: 'settings-o', component: PropertiesTabComponent,
51                 input: {title: 'Properties and Attributes'}, isActive: false, tooltipText: 'Properties'
52             },
53             reqAndCapabilities : {
54                 titleIcon: 'req-capabilities-o', component: ReqAndCapabilitiesTabComponent, input: {},
55                 isActive: false, tooltipText: 'Requirements and Capabilities'
56             },
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'},
59         };
60
61     beforeEach(
62         async(() => {
63
64             const configure: ConfigureFn = (testBed) => {
65                 testBed.configureTestingModule({
66                     declarations: [CompositionPanelComponent],
67                     imports: [NgxsModule.forRoot([WorkspaceState])],
68                     schemas: [NO_ERRORS_SCHEMA],
69                     providers: [],
70                 });
71             };
72
73             configureTests(configure).then((testBed) => {
74                 fixture = testBed.createComponent(CompositionPanelComponent);
75                 store = testBed.get(Store);
76             });
77         })
78     );
79
80     it('When PolicyInstance Selected => Expect (info, policyTargets and policyProperties) tabs appear', () => {
81
82         const testInstance = new PolicyInstance();
83
84         fixture.componentInstance.initTabs(testInstance);
85
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);
90     });
91
92     it('should match current snapshot of composition-panel component.', () => {
93         expect(fixture).toMatchSnapshot();
94     });
95
96     it('When Topology Template is Service and no instance is selected Expect (info, deployment, inputs, info and api)', () => {
97
98         const selectedComponent: Service = new Service(null, null);
99         selectedComponent.isResource = jest.fn(() => false);
100         selectedComponent.isService = jest.fn(() => true );
101
102         fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
103
104         // const pnfMock = Mock.of<Service>({ isResource : () => false });
105         fixture.componentInstance.topologyTemplate = selectedComponent;
106
107         // Call ngOnInit
108         fixture.componentInstance.ngOnInit();
109
110         // Expect that
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);
117
118     });
119
120     it('When Topology Template is Resource and no instance is selected Expect (info, deployment, inputs, info and api)', () => {
121
122         const selectedComponent: Service = new Service(null, null);
123         selectedComponent.isResource = jest.fn(() => true);
124         selectedComponent.isService = jest.fn(() => false );
125
126         fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
127
128         fixture.componentInstance.topologyTemplate = selectedComponent;
129
130         // Call ngOnInit
131         fixture.componentInstance.ngOnInit();
132
133         // Expect that
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);
140
141     });
142
143     it('When Topology Template is Service and proxyService instance is selected ' +
144         'Expect (info, deployment, inputs, info and api)', () => {
145
146         const selectedComponent: Service = new Service(null, null);
147         selectedComponent.isResource = jest.fn(() => false);
148         selectedComponent.isService = jest.fn(() => true );
149
150         fixture.componentInstance.store.select = jest.fn(() => Observable.of(selectedComponent));
151         fixture.componentInstance.selectedComponentIsServiceProxyInstance = jest.fn(() => true);
152
153         // const pnfMock = Mock.of<Service>({ isResource : () => false });
154         fixture.componentInstance.topologyTemplate = selectedComponent;
155
156         // Call ngOnInit
157         fixture.componentInstance.ngOnInit();
158
159         // Expect that
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);
164
165     });
166
167     it('When Topology Template is Resource and VL is selected ' +
168         'Expect (info, deployment, inputs, info and api)', () => {
169
170         const topologyTemplate: Resource = new Resource(null, null);
171         topologyTemplate.isResource = jest.fn(() => true);
172         topologyTemplate.isService = jest.fn(() => false );
173
174         const vlMock = Mock.of<Resource>({ resourceType : 'VL', isResource : () => true, isService : () => false });
175         fixture.componentInstance.store.select = jest.fn(() => Observable.of(vlMock));
176
177         fixture.componentInstance.topologyTemplate = topologyTemplate;
178
179         // Call ngOnInit
180         fixture.componentInstance.ngOnInit();
181
182         // Expect that
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);
189
190     });
191
192     it('When Topology Template is Service and VL is selected ' +
193         'Expect (info, deployment, inputs, info and api)', () => {
194
195         const topologyTemplate: Service = new Service(null, null);
196         topologyTemplate.isResource = jest.fn(() => true);
197         topologyTemplate.isService = jest.fn(() => false );
198
199         const vlMock = Mock.of<Resource>({ resourceType : 'VL', isResource : () => true, isService : () => false });
200         fixture.componentInstance.store.select = jest.fn(() => Observable.of(vlMock));
201
202         fixture.componentInstance.topologyTemplate = topologyTemplate;
203
204         // Call ngOnInit
205         fixture.componentInstance.ngOnInit();
206
207         // Expect that
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);
214
215     });
216
217     it('When GroupInstance Selected => Expect (info, groupMembers and groupProperties) tabs appear.', () => {
218
219         const testInstance = new GroupInstance();
220         fixture.componentInstance.initTabs(testInstance);
221
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);
226     });
227
228 });