e53c63be19d4a9f9867c14c7bae03d58c3a4bbd9
[vid.git] / vid-webpack-master / src / app / shared / components / searchMembersModal / members-table / members-table.service.spec.ts
1 import {MembersTableService} from "./members-table.service";
2 import {TestBed, getTestBed} from "@angular/core/testing";
3 import {NgRedux} from "@angular-redux/store";
4 import {CustomTableColumnDefinition} from "./members-table.component";
5 import {AppState} from "../../../store/reducers";
6 import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
7 import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe";
8 import {VnfMember} from "../../../models/VnfMember";
9
10
11
12 class MockAppStore<T> {
13   dispatch() {
14   }
15   getState() {
16     return {
17       service : {
18         serviceHierarchy: {
19         },
20         serviceInstance : {
21           "serviceModelId" : {
22             vnfGroups:{
23               "aa1":{
24                 vnfs:{
25                    "VNF1_INSTANCE_ID":{
26                       "action": "None",
27                       "instanceName": "VNF1_INSTANCE_NAME",
28                       "instanceId": "VNF1_INSTANCE_ID",
29                       "orchStatus": null,
30                       "lcpCloudRegionId": "mtn23b",
31                       "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a",
32                       "tenantName": "APPC-24595-T-IST-02C",
33                       "modelInfo": {
34                       "modelInvariantId": "vnf-instance-model-invariant-id",
35                         "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
36                         "modelVersion": "2.0",
37                         "modelName": "vf_vEPDG",
38                         "modelType": "vnf"
39                     },
40                       "instanceType": "VNF1_INSTANCE_TYPE",
41                       "provStatus": null,
42                       "inMaint": false,
43                       "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
44                       "trackById": "7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
45                       "serviceInstanceId": "service-instance-id1",
46                       "serviceInstanceName": "service-instance-name"
47
48                   },
49                   "aa1-vnf1":{
50                     vnfName: "",
51                     instanceId:"",
52                     serviceInstanceId:""
53                   }
54                 }
55               }
56             }
57           }
58
59         }
60       }
61     }
62   }
63 }
64
65 describe('MembersTableService view member count', () => {
66   let injector;
67   let service: MembersTableService;
68   let store: NgRedux<AppState>;
69   let data = loadMockMembers();
70
71   beforeAll(done => (async () => {
72
73     TestBed.configureTestingModule(
74       {
75         providers: [
76           MembersTableService,
77           {provide: NgRedux, useClass: MockAppStore},
78           DataFilterPipe
79
80         ],
81         declarations: [DataFilterPipe]
82       });
83     await TestBed.compileComponents();
84
85     injector = getTestBed();
86     service = injector.get(MembersTableService);
87     store = injector.get(NgRedux)
88
89   })().then(done).catch(done.fail));
90
91
92   test('should return number of displayed members', () => {
93     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
94     service.filteredMembers = <any>data;
95     expect(service.calculateNotHideVnfMembers()).toEqual(2);
96   });
97
98   test('should return number of selected members', () => {
99     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
100     service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true;
101     service.allMemberStatusMap['VNF2_INSTANCE_ID'].isSelected = true;
102     expect(service.calculateSelectedVnfMembers()).toEqual(2);
103   });
104
105   test('should return number of selected members', () => {
106     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
107     service.filteredMembers = <any>data;
108     service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true;
109     service.filterMembers('VNF2');
110     service.allMemberStatusMap['VNF2_INSTANCE_ID'].isSelected = true;
111     expect(service.calculateNotHideVnfMembers()).toEqual(1);
112   });
113
114   test('getHeader should return labels with array of keys', () => {
115     const headers: CustomTableColumnDefinition[] = MembersTableService.getHeaders();
116     expect(headers).toEqual([
117       {displayName: 'VNF instance name', key: ['instanceName']},
118       {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']},
119       {displayName: 'VNF model name', key: ['modelInfo', 'modelName']},
120       {displayName: 'Prov Status', key: ['provStatus']},
121       {displayName: 'Service instance name', key: ['serviceInstanceName']},
122       {displayName: 'Cloud Region', key: ['lcpCloudRegionId']},
123       {displayName: 'Tenant Name', key: ['tenantName']}
124     ]);
125   });
126
127
128   test('setMembers should dispatch action only on selected members', () => {
129     const vnfGroupStoreKey: string = 'vnfGroupStoreKey';
130     const serviceId: string = 'serviceId';
131
132     jest.spyOn(store, 'dispatch');
133     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
134     service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true;
135     service.setMembers({serviceId: serviceId, vnfGroupStoreKey: vnfGroupStoreKey});
136     expect(store.dispatch).toHaveBeenCalledTimes(1);
137     expect(store.dispatch).toHaveBeenCalledWith(createRelatedVnfMemberInstance(vnfGroupStoreKey, serviceId, service.allMemberStatusMap['VNF1_INSTANCE_ID']));
138   });
139
140   test('generateAllMembersStatus should add to each instance isHide and isSelected and convert to map', () => {
141
142     let allMemberStatusMapMock = MembersTableService.generateAllMembersStatus(<any>data);
143     for (const key in allMemberStatusMapMock) {
144       expect(allMemberStatusMapMock[key].isSelected).toBeFalsy();
145     }
146   });
147
148   test('changeAllCheckboxStatus', () => {
149     let data = loadMockMembers();
150     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
151     service.filteredMembers = <any>data;
152     service.changeAllCheckboxStatus(true);
153     for (let key in service.allMemberStatusMap) {
154       expect(service.allMemberStatusMap[key].isSelected).toEqual(true);
155     }
156   });
157
158   test('should reset all numbers and lists', () => {
159     let data = loadMockMembers();
160     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
161     service.filteredMembers = <any>data;
162     service.changeAllCheckboxStatus(true);
163     service.resetAll();
164     expect(service.numberOfNotHideVnfMembers).toEqual(0);
165     expect(service.numberOfSelectedAndNotHideVnfMembers).toEqual(0);
166     expect(service.numberOfSelectedVnfMembers).toEqual(0);
167     expect(service.allMemberStatusMap).toEqual({});
168     expect(service.filteredMembers.length).toEqual(0);
169   });
170
171   test('checkAllCheckboxStatus should be false if not all are selected', () => {
172     service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>loadMockMembers());
173     service.updateAmountsAndCheckAll();
174
175     expect(service.allCheckboxAreSelected).toEqual(false);
176   });
177
178
179   test('sortVnfMembersByName should sort list by vnf name', () => {
180     let data = <any>loadMockMembers();
181     let sortedList = MembersTableService.sortVnfMembersByName(data, "instanceName");
182
183     expect(sortedList[0].instanceName).toEqual("VNF1_INSTANCE_NAME");
184     expect(sortedList[1].instanceName).toEqual("VNF2_INSTANCE_NAME");
185
186     let tmp = data[0];
187     data[0] = data[1];
188     data[1] = tmp;
189
190     sortedList = MembersTableService.sortVnfMembersByName(data, "instanceName");
191
192     expect(sortedList[1].instanceName).toEqual("VNF1_INSTANCE_NAME");
193     expect(sortedList[0].instanceName).toEqual("VNF2_INSTANCE_NAME");
194     sortedList = MembersTableService.sortVnfMembersByName(null, "instanceName");
195     expect(sortedList).toEqual([]);
196     sortedList = MembersTableService.sortVnfMembersByName(data, undefined);
197     expect(sortedList).toEqual([]);
198   });
199
200   test('should return only vnf members not associated to any vnf group', ()=>{
201     const result: VnfMember[] = service.filterUsedVnfMembers("serviceModelId",loadMockMembers());
202     expect(result.length).toEqual(1);
203     expect(result[0].instanceId).toEqual("VNF2_INSTANCE_ID");
204   });
205
206 });
207
208
209 function loadMockMembers(): any[] {
210   return [
211     {
212       "action": "None",
213       "instanceName": "VNF1_INSTANCE_NAME",
214       "instanceId": "VNF1_INSTANCE_ID",
215       "orchStatus": null,
216       "productFamilyId": null,
217       "lcpCloudRegionId": "mtn23b",
218       "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a",
219       "tenantName": "APPC-24595-T-IST-02C",
220       "modelInfo": {
221         "modelInvariantId": "vnf-instance-model-invariant-id",
222         "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
223         "modelVersion": "2.0",
224         "modelName": "vf_vEPDG",
225         "modelType": "vnf"
226       },
227       "instanceType": "VNF1_INSTANCE_TYPE",
228       "provStatus": null,
229       "inMaint": false,
230       "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
231       "originalName": null,
232       "legacyRegion": null,
233       "lineOfBusiness": null,
234       "platformName": null,
235       "trackById": "7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
236       "serviceInstanceId": "service-instance-id1",
237       "serviceInstanceName": "service-instance-name"
238     },
239     {
240       "action": "None",
241       "instanceName": "VNF2_INSTANCE_NAME",
242       "instanceId": "VNF2_INSTANCE_ID",
243       "orchStatus": null,
244       "productFamilyId": null,
245       "lcpCloudRegionId": "mtn23b",
246       "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a",
247       "tenantName": "APPC-24595-T-IST-02C",
248       "modelInfo": {
249         "modelInvariantId": "vnf-instance-model-invariant-id",
250         "modelVersionId": "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
251         "modelVersion": "1.0",
252         "modelName": "vf_vEPDG",
253         "modelType": "vnf"
254       },
255       "instanceType": "VNF2_INSTANCE_TYPE",
256       "provStatus": null,
257       "inMaint": true,
258       "uuid": "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
259       "originalName": null,
260       "legacyRegion": null,
261       "lineOfBusiness": null,
262       "platformName": null,
263       "trackById": "eb5f56bf-5855-4e61-bd00-3e19a953bf02:003",
264       "serviceInstanceId": "service-instance-id2",
265       "serviceInstanceName": "service-instance-name"
266     }
267   ];
268 }
269
270