Can't delete the second vfModule in drawing board - fix.
[vid.git] / vid-webpack-master / src / app / shared / storeUtil / utils / vfModule / vfModule.reducers.spec.ts
1 import {
2   CreateVFModuleInstanceAction,
3   DeleteActionVfModuleInstanceAction,
4   DeleteVFModuleField,
5   DeleteVfModuleInstanceAction,
6   UndoDeleteActionVfModuleInstanceAction,
7   UpdateVFModluePosition,
8   UpdateVFModuleField,
9   UpgradeVfModuleInstanceAction,
10   VfModuleActions
11 } from "./vfModule.actions";
12 import {vfModuleReducer} from "./vfModule.reducers";
13 import {VfModuleInstance} from "../../../models/vfModuleInstance";
14 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
15 import each from "jest-each";
16
17
18 describe('vfModuleReducer', () => {
19   test('#REMOVE_VNF_MODULE_INSTANCE : should delete existing vnf module by dynamicModelName', () => {
20     let state = vfModuleReducer(<any>{
21         serviceInstance: {
22           'serviceModelId': {
23             vnfs: {
24               'vfName': {
25                 vfModules: {
26                   'modelName': {
27                     'dynamicModelName1': {},
28                     'dynamicModelName2': {},
29                   }
30                 }
31               }
32             }
33           }
34         }
35       },
36       <DeleteVfModuleInstanceAction>{
37         type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
38         modelName: 'modelName',
39         vfName: 'vfName',
40         vnfStoreKey: 'vfName',
41         serviceModelId: 'serviceModelId',
42         dynamicModelName: 'dynamicModelName1'
43       });
44
45     expect(state).toBeDefined();
46     expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']['dynamicModelName2']).toBeDefined();
47     expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']['dynamicModelName1']).not.toBeDefined();
48   });
49
50   test('#DELETE_LAST_VNF_MODULE_INSTANCE : should delete existing vnf module', () => {
51     let state = vfModuleReducer(<any>{
52         serviceInstance: {
53           'serviceModelId': {
54             vnfs: {
55               'vfName': {
56                 vfModules: {
57                   'modelName': {
58                     'dynamicModelName': {}
59                   }
60                 }
61               }
62             }
63           }
64         }
65       },
66       <DeleteVfModuleInstanceAction>{
67         type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
68         modelName: 'modelName',
69         vfName: 'vfName',
70         vnfStoreKey: 'vfName',
71         serviceModelId: 'serviceModelId',
72         dynamicModelName: 'dynamicModelName'
73       });
74
75     expect(state).toBeDefined();
76     expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']).not.toBeDefined();
77   });
78
79   test('#CREATE_VF_MODULE: should create new vfModule to existing VNF', () => {
80     let vfModuleInstance: VfModuleInstance = new VfModuleInstance();
81     vfModuleInstance.instanceName = 'instanceName';
82     vfModuleInstance.isMissingData = false;
83     vfModuleInstance.volumeGroupName = 'volumeGroupName';
84     let vfModule = vfModuleReducer(<any>{
85         serviceInstance: {
86           'serviceUuid': {
87             vnfs: {
88               'vnfStoreKey': {
89                 'vfModules': {}
90               }
91             }
92           }
93         }
94       },
95       <CreateVFModuleInstanceAction>{
96         type: VfModuleActions.CREATE_VF_MODULE,
97         vfId: 'vfId',
98         vfInstance: new VfModuleInstance(),
99         vnfStoreKey: 'vnfStoreKey',
100         serviceUuid: 'serviceUuid',
101         index: 1
102       }).serviceInstance['serviceUuid'].vnfs['vnfStoreKey'].vfModules;
103
104     let firstVfModuleName = Object.keys(vfModule)[0];
105     expect(vfModule[firstVfModuleName]).toBeDefined();
106     expect(vfModule[firstVfModuleName].isMissingData).toBeFalsy();
107   });
108
109   test('#UPDATE_VFMODULE_FEILD: should update field with some value', () => {
110     const newFieldName = 'newFieldName';
111     const newFieldValue = 'newFieldValue';
112     let oldState = getReduxState();
113
114     let newState = vfModuleReducer(<any>oldState,
115       <UpdateVFModuleField>{
116         type: VfModuleActions.UPDATE_VFMODULE_FEILD,
117         dynamicModelName: 'dynamicModelName1',
118         vnfStoreKey: 'vnfStoreKey',
119         serviceId: 'serviceModelId',
120         modelName: 'vfModuleModelName',
121         fieldName: newFieldName,
122         fieldValue: newFieldValue
123       });
124
125     let vfModule = newState.serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName']['dynamicModelName1'];
126
127     expect(vfModule[newFieldName]).toEqual(newFieldValue);
128   });
129
130   test('#DELETE_VFMODULE_FEILD: should update field with some value', () => {
131       const deleteFieldName = 'deleteFieldName';
132       let oldState = {
133         serviceHierarchy: {
134           'serviceModelId': {}
135         },
136         serviceInstance: {
137           'serviceModelId': {
138             vnfs: {
139               'vnfStoreKey': {
140                 vfModules: {
141                   'modelName': {
142                     'dynamicModelName1': {
143                       isMissingData: true,
144                       [deleteFieldName]: true,
145                       action: 'None'
146                     },
147                     'dynamicModelName2': {},
148                   }
149                 }
150               }
151             }
152           }
153         }
154       };
155       let newState = vfModuleReducer(<any>oldState,
156     <DeleteVFModuleField>{
157       type: VfModuleActions.DELETE_VFMODULE_FIELD,
158       dynamicModelName: 'dynamicModelName1',
159       vnfStoreKey: 'vnfStoreKey',
160       serviceId: 'serviceModelId',
161       modelName: 'modelName',
162       deleteFieldName: deleteFieldName,
163     });
164
165   let vfModule = newState.serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
166
167   expect(vfModule[deleteFieldName]).toBeUndefined();
168 });
169
170 test('#UPDATE_VFMODULE_POSITION: should update position', () => {
171   let vfModule = vfModuleReducer(<any>{
172       serviceHierarchy: {
173         'serviceModelId': {}
174       },
175       serviceInstance: {
176         'serviceModelId': {
177           vnfs: {
178             'vfName': {
179               vfModules: {
180                 'modelName': {
181                   'dynamicModelName': {
182                     isMissingData: true
183                   }
184                 }
185               }
186             }
187           }
188         }
189       }
190     },
191     <UpdateVFModluePosition>{
192       type: VfModuleActions.UPDATE_VFMODULE_POSITION,
193       node: {
194         position: 1,
195         dynamicModelName: "dynamicModelName",
196         modelName: "modelName"
197       },
198       instanceId: "serviceModelId",
199       vnfStoreKey: "vfName"
200
201     }).serviceInstance['serviceModelId'].vnfs['vfName'].vfModules["modelName"]["dynamicModelName"];
202
203   expect(vfModule.position).toEqual(1);
204 });
205
206   each([
207     ['for the first vfModule', 'dynamicModelName1', true],
208     ['for the second vfModule', 'dynamicModelName2', true],
209   ]).
210 test('#DELETE_ACTION_VF_MODULE_INSTANCE %s', (description, dynamicModelName: string, isMissingData: boolean) => {
211     let vfModule = vfModuleReducer(<any>getReduxState(), getDeleteActionVfModule(dynamicModelName))
212       .serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName'][dynamicModelName];
213
214     expect(vfModule).toBeDefined();
215     expect(vfModule.isMissingData).toBeTruthy();
216     expect(vfModule.action).toEqual(ServiceInstanceActions.None_Delete);
217   });
218
219 test('#DELETE_ACTION_VF_MODULE_INSTANCE set tenantId and lcpCloudRegion to VFM', () => {
220   let vfModule = vfModuleReducer(<any>getReduxState(), getDeleteActionVfModule('dynamicModelName1'))
221     .serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName']['dynamicModelName1'];
222
223   expect(vfModule).toBeDefined();
224   expect(vfModule.tenantId).toEqual('tenantId');
225   expect(vfModule.lcpCloudRegionId).toEqual('lcpCloudRegionId');
226
227 });
228
229 test('#UNDO_DELETE_ACTION_VF_MODULE_INSTANCE', () => {
230   let vfModule = vfModuleReducer(<any>{
231       serviceHierarchy: {
232         'serviceModelId': {}
233       },
234       serviceInstance: {
235         'serviceModelId': {
236           vnfs: {
237             'vnfStoreKey': {
238               vfModules: {
239                 'modelName': {
240                   'dynamicModelName1': {
241                     isMissingData: true,
242                     action: 'None_Delete'
243                   },
244                   'dynamicModelName2': {},
245                 }
246               }
247             }
248           }
249         }
250       }
251     },
252     <UndoDeleteActionVfModuleInstanceAction>{
253       type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE,
254       dynamicModelName: 'dynamicModelName1',
255       vnfStoreKey: 'vnfStoreKey',
256       serviceId: 'serviceModelId'
257     }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
258
259   expect(vfModule).toBeDefined();
260   expect(vfModule.action).toEqual(ServiceInstanceActions.None);
261 });
262
263 test('#UPGRADE_VFMODULE', () => {
264   let vfModule = vfModuleReducer(<any>getReduxState(),
265     <UpgradeVfModuleInstanceAction>{
266       type: VfModuleActions.UPGRADE_VFMODULE,
267       dynamicModelName: 'dynamicModelName1',
268       vnfStoreKey: 'vnfStoreKey',
269       serviceId: 'serviceModelId',
270       modelName: 'vfModuleModelName'
271     }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName']['dynamicModelName1'];
272
273   expect(vfModule.action).toEqual(ServiceInstanceActions.None_Upgrade);
274 });
275
276 test('#UNDO_UPGRADE_VFMODULE', () => {
277   let vfModule = vfModuleReducer(<any>{
278       serviceHierarchy: {
279         'serviceModelId': {}
280       },
281       serviceInstance: {
282         'serviceModelId': {
283           vnfs: {
284             'vnfStoreKey': {
285               vfModules: {
286                 'modelName': {
287                   'dynamicModelName1': {
288                     isMissingData: true,
289                     action: 'None_Upgrade'
290                   },
291                   'dynamicModelName2': {},
292                 }
293               }
294             }
295           }
296         }
297       }
298     },
299     <UpgradeVfModuleInstanceAction>{
300       type: VfModuleActions.UNDO_UPGRADE_VFMODULE_ACTION,
301       dynamicModelName: 'dynamicModelName1',
302       vnfStoreKey: 'vnfStoreKey',
303       serviceId: 'serviceModelId',
304       modelName: 'modelName'
305     }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
306
307   expect(vfModule.action).toEqual(ServiceInstanceActions.None);
308 });
309
310 function getReduxState() {
311  return {
312    serviceHierarchy: {
313      'serviceModelId': {}
314    },
315    serviceInstance: {
316      'serviceModelId': {
317        vnfs: {
318          'vnfStoreKey': {
319            tenantId: 'tenantId',
320            lcpCloudRegionId: 'lcpCloudRegionId',
321            vfModules: {
322              'vfModuleModelName': {
323                'dynamicModelName1': {
324                  isMissingData: true,
325                  action: 'None',
326                },
327                'dynamicModelName2': {
328                  action: 'None',
329                  isMissingData: true,
330                },
331              }
332            }
333          }
334        }
335      }
336    }
337  }
338 }
339
340 function getDeleteActionVfModule(dynamicModelName?: string) {
341   return <DeleteActionVfModuleInstanceAction>{
342     type: VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE,
343     dynamicModelName: dynamicModelName,
344     vnfStoreKey: 'vnfStoreKey',
345     serviceId: 'serviceModelId',
346     vfModuleModelName: 'vfModuleModelName',
347   }
348 }
349 });