Fix for Penetration test _ Session and cookie management
[vid.git] / vid-webpack-master / src / app / shared / components / genericFormPopup / genericFormServices / vfModuleUpgrade / vfModule.upgrade.popup.service.spec.ts
1 import {LogService} from "../../../../utils/log/log.service";
2 import {NgRedux} from "@angular-redux/store";
3 import {
4   ControlGeneratorUtil,
5   SDN_C_PRE_LOAD,
6   SUPPLEMENTARY_FILE
7 } from "../../../genericForm/formControlsServices/control.generator.util.service";
8 import {AaiService} from "../../../../services/aaiService/aai.service";
9 import {HttpClient} from "@angular/common/http";
10 import {GenericFormService} from "../../../genericForm/generic-form.service";
11 import {FormBuilder, FormGroup} from "@angular/forms";
12 import {IframeService} from "../../../../utils/iframe.service";
13 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
14 import {BasicPopupService} from "../basic.popup.service";
15 import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
16 import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
17 import {getTestBed, TestBed} from "@angular/core/testing";
18 import {UpgradeFormControlNames, VfModuleUpgradePopupService} from "./vfModule.upgrade.popuop.service";
19 import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
20 import {AppState} from "../../../../store/reducers";
21 import {instance, mock} from "ts-mockito";
22 import {GeneralActions} from "../../../../storeUtil/utils/general/general.actions";
23 import {VfModuleActions} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
24 import {ServiceActions} from "../../../../storeUtil/utils/service/service.actions";
25 import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
26 import * as _ from "lodash";
27 import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
28 import {ModalService} from "../../../customModal/services/modal.service";
29
30 class MockModalService<T> {}
31
32 class MockAppStore<T> {}
33
34 class MockReduxStore<T> {
35   getState() {
36     return {
37       service: {
38         serviceHierarchy: {
39           serviceId: {
40             vfModules: {
41               vfModuleName: {
42                 volumeGroupAllowed: true
43               }
44             }
45           }
46         },
47         serviceInstance : {
48           serviceId : {
49             vnfs : {
50               vnfStoreKey : {
51                 vfModules: {
52                   vfModuleName: {
53                     vfModuleId : {
54                       supplementaryFileName: "myFileName"
55                     }}}}}}}}
56     };
57   }
58   dispatch() {}
59 }
60
61 class MockFeatureFlagsService {}
62
63 describe('VFModule popup service', () => {
64   let injector;
65   let service: VfModuleUpgradePopupService;
66   let genericFormService: GenericFormService;
67   let defaultDataGeneratorService: DefaultDataGeneratorService;
68   let fb: FormBuilder;
69   let iframeService: IframeService;
70   let store : NgRedux<AppState>;
71   let _sharedTreeService : SharedTreeService;
72
73   beforeAll(done => (async () => {
74     TestBed.configureTestingModule({
75       providers: [
76         VfModuleUpgradePopupService,
77         ControlGeneratorUtil,
78         SharedControllersService,
79         VfModuleControlGenerator,
80         DefaultDataGeneratorService,
81         GenericFormService,
82         FormBuilder,
83         IframeService,
84         AaiService,
85         LogService,
86         BasicPopupService,
87         SharedTreeService,
88         {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
89         {provide: NgRedux, useClass: MockReduxStore},
90         {provide: HttpClient, useClass: MockAppStore},
91         {provide: ModalService, useClass: MockModalService}
92       ]
93     });
94     await TestBed.compileComponents();
95
96     injector = getTestBed();
97     service = injector.get(VfModuleUpgradePopupService);
98     genericFormService = injector.get(GenericFormService);
99     defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
100     fb = injector.get(FormBuilder);
101     iframeService = injector.get(IframeService);
102     _sharedTreeService = injector.get(SharedTreeService);
103     store = injector.get(NgRedux);
104     service.uuidData = {
105       vfModule: {
106         data: {}
107       },
108       modelName: 'vfModuleName',
109       vFModuleStoreKey: 'vfModuleId'
110     };
111
112   })().then(done).catch(done.fail));
113
114   test('getTitle should return the correct title', () => {
115     expect(service.getTitle()).toBe("Upgrade Module")
116   });
117
118   function findControlByName(controls: FormControlModel[], controlName: string) : FormControlModel {
119     return controls.find((control) => {
120       return control.controlName === controlName;
121     });
122   }
123
124   function getControlByNameAndCheckValue(controlName: string, expectedValue: any, shouldControllerExist: boolean) {
125     const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
126     const control = findControlByName(controls, controlName);
127     if(shouldControllerExist){
128       expect(control).toBeDefined();
129       expect(control.value).toEqual(expectedValue);
130     }
131     else{
132       expect(control).toBeUndefined();
133     }
134   }
135
136   test('get controls should return retainVolumeGroup control with false', ()=> {
137     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, false, true);
138   });
139
140   [true, false].forEach(notExistsOnModel => {
141     test(`retainVolumeGroup control is shown when vfModule not from model (notExistsOnModel=${notExistsOnModel})`, () => {
142       let stateCopy = _.cloneDeep(store.getState());
143       stateCopy.service.serviceHierarchy['serviceId'].vfModules['vfModuleName'].volumeGroupAllowed = false;
144       jest.spyOn(store, 'getState').mockReturnValue(stateCopy);
145
146       jest.spyOn(_sharedTreeService, 'isVfModuleCustomizationIdNotExistsOnModel').mockReturnValue(notExistsOnModel);
147
148       getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, false, notExistsOnModel);
149     });
150   });
151
152   test('get controls should contain SUPPLEMENTARY_FILE controller', ()=> {
153
154     //when
155     const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
156
157     //then
158     const control = findControlByName(controls, SUPPLEMENTARY_FILE);
159     expect(control).toBeDefined();
160     expect(control.selectedFile).toBe("myFileName");
161   });
162
163   test('on submit should call merge action of form value to vfModule', () => {
164
165     //given
166
167     const serviceId = "serviceId5";
168     const vnfStoreKey = 'vnfStoreKey3';
169     const modelName = 'modelA';
170     const dynamicModelName = 'dynamicModel';
171     const that = {
172       uuidData : {
173         vfModule : {
174           data : {
175             modelName,
176             dynamicModelName
177           },
178           parent : {
179             data: {
180               vnfStoreKey
181             }}},
182         serviceId
183       },
184       serviceModel: {
185         uuid : "someUuid"
186       },
187       _iframeService: {
188         removeClassCloseModal : jest.fn()
189       }
190     };
191
192     let mockFrom: FormGroup = mock(FormGroup);
193     let form = instance(mockFrom);
194     form.value = {
195       a: "value",
196       b: "another"
197     };
198     form.controls = {
199       supplementaryFile_hidden_content : {
200         value: '[{"name": "c", "value": "c"}, {"name": "d", "value": "1"}]'
201         },
202       supplementaryFile_hidden : {
203         value: {
204           name: "name"
205         }
206       }
207     };
208 form.value['retainAssignments'] = false;
209     let expectedMergePayload = {
210       a: "value",
211       b: "another",
212       supplementaryFileContent: [{"name": "c", "value": "c"}, {"name": "d", "value": "1"}],
213       supplementaryFileName: "name",
214           retainAssignments: false
215     };
216
217     spyOn(store, 'dispatch');
218
219     //when
220     service.onSubmit(that, form);
221
222     //then
223     expect(store.dispatch).toBeCalledWith(
224       {type: GeneralActions.MERGE_OBJECT_BY_PATH, path: ['serviceInstance', serviceId, 'vnfs', vnfStoreKey, 'vfModules',modelName, dynamicModelName], payload:expectedMergePayload});
225     expect(store.dispatch).toBeCalledWith(
226       {type: VfModuleActions.UPGRADE_VFMODULE, dynamicModelName: "dynamicModel", modelName: "modelA", serviceId: "serviceId5", vnfStoreKey: "vnfStoreKey3"});
227     expect(store.dispatch).toBeCalledWith({type: ServiceActions.UPGRADE_SERVICE_ACTION, serviceUuid: "serviceId5"});
228
229   });
230
231
232   test( 'get controls should return usePreload with true value', () => {
233     getControlByNameAndCheckValue(SDN_C_PRE_LOAD, true, true);
234   });
235 });