Merge "Upgrade to Angular 8"
[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 {SdcUiServices} from "onap-ui-angular";
17 import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
18 import {getTestBed, TestBed} from "@angular/core/testing";
19 import {UpgradeFormControlNames, VfModuleUpgradePopupService} from "./vfModule.upgrade.popuop.service";
20 import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
21 import {AppState} from "../../../../store/reducers";
22 import {instance, mock} from "ts-mockito";
23 import {GeneralActions} from "../../../../storeUtil/utils/general/general.actions";
24 import {VfModuleActions} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
25 import {ServiceActions} from "../../../../storeUtil/utils/service/service.actions";
26 import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
27 import * as _ from "lodash";
28 import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
29 import {ModalService} from "../../../customModal/services/modal.service";
30
31 class MockModalService<T> {}
32
33 class MockAppStore<T> {}
34
35 class MockReduxStore<T> {
36   getState() {
37     return {
38       service: {
39         serviceHierarchy: {
40           serviceId: {
41             vfModules: {
42               vfModuleName: {
43                 volumeGroupAllowed: true
44               }
45             }
46           }
47         },
48         serviceInstance : {
49           serviceId : {
50             vnfs : {
51               vnfStoreKey : {
52                 vfModules: {
53                   vfModuleName: {
54                     vfModuleId : {
55                       supplementaryFileName: "myFileName"
56                     }}}}}}}}
57     };
58   }
59   dispatch() {}
60 }
61
62 class MockFeatureFlagsService {}
63
64 describe('VFModule popup service', () => {
65   let injector;
66   let service: VfModuleUpgradePopupService;
67   let genericFormService: GenericFormService;
68   let defaultDataGeneratorService: DefaultDataGeneratorService;
69   let fb: FormBuilder;
70   let iframeService: IframeService;
71   let store : NgRedux<AppState>;
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     store = injector.get(NgRedux);
103     service.uuidData = {
104       modelName: 'vfModuleName',
105       vFModuleStoreKey: 'vfModuleId'
106     };
107
108   })().then(done).catch(done.fail));
109
110   test('getTitle should return the correct title', () => {
111     expect(service.getTitle()).toBe("Upgrade Module")
112   });
113
114   function findControlByName(controls: FormControlModel[], controlName: string) : FormControlModel {
115     return controls.find((control) => {
116       return control.controlName === controlName;
117     });
118   }
119
120   function getControlByNameAndCheckValue(controlName: string, expectedValue: any, shouldControllerExist: boolean) {
121     const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
122     const control = findControlByName(controls, controlName);
123     if(shouldControllerExist){
124       expect(control).toBeDefined();
125       expect(control.value).toEqual(expectedValue);
126     }
127     else{
128       expect(control).toBeUndefined();
129     }
130   }
131
132   test('get controls should return retainAssignments control with true value', ()=> {
133     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_ASSIGNMENTS, true, true);
134   });
135
136   test('get controls should return retainVolumeGroup control with true value', ()=> {
137     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, true, true);
138   });
139
140   test('get controls should NOT return retainVolumeGroup control with true value', ()=> {
141     let stateCopy =_.cloneDeep(store.getState());
142     stateCopy.service.serviceHierarchy['serviceId'].vfModules['vfModuleName'].volumeGroupAllowed = false;
143     jest.spyOn(store, 'getState').mockReturnValue(stateCopy);
144     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, null, false);
145   });
146
147   test('get controls should contain SUPPLEMENTARY_FILE controller', ()=> {
148
149     //when
150     const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
151
152     //then
153     const control = findControlByName(controls, SUPPLEMENTARY_FILE);
154     expect(control).toBeDefined();
155     expect(control.selectedFile).toBe("myFileName");
156   });
157
158   test('on submit should call merge action of form value to vfModule', () => {
159
160     //given
161
162     const serviceId = "serviceId5";
163     const vnfStoreKey = 'vnfStoreKey3';
164     const modelName = 'modelA';
165     const dynamicModelName = 'dynamicModel';
166     const that = {
167       uuidData : {
168         vfModule : {
169           data : {
170             modelName,
171             dynamicModelName
172           },
173           parent : {
174             data: {
175               vnfStoreKey
176             }}},
177         serviceId
178       },
179       serviceModel: {
180         uuid : "someUuid"
181       },
182       _iframeService: {
183         removeClassCloseModal : jest.fn()
184       }
185     };
186
187     let mockFrom: FormGroup = mock(FormGroup);
188     let form = instance(mockFrom);
189     form.value = {
190       a: "value",
191       b: "another"
192     };
193     form.controls = {
194       supplementaryFile_hidden_content : {
195         value: '{"c": "c", "d": 1}'
196         },
197       supplementaryFile_hidden : {
198         value: {
199           name: "name"
200         }
201       }
202     };
203
204     let expectedMergePayload = {
205       a: "value",
206       b: "another",
207       supplementaryFileContent: {c: "c", d: 1},
208       supplementaryFileName: "name"
209     };
210
211     spyOn(store, 'dispatch');
212
213     //when
214     service.onSubmit(that, form);
215
216     //then
217     expect(store.dispatch).toBeCalledWith(
218       {type: GeneralActions.MERGE_OBJECT_BY_PATH, path: ['serviceInstance', serviceId, 'vnfs', vnfStoreKey, 'vfModules',modelName, dynamicModelName], payload:expectedMergePayload});
219     expect(store.dispatch).toBeCalledWith(
220       {type: VfModuleActions.UPGRADE_VFMODULE, dynamicModelName: "dynamicModel", modelName: "modelA", serviceId: "serviceId5", vnfStoreKey: "vnfStoreKey3"});
221     expect(store.dispatch).toBeCalledWith({type: ServiceActions.UPGRADE_SERVICE_ACTION, serviceUuid: "serviceId5"});
222
223   });
224
225
226   test( 'get controls should return usePreload with false value', () => {
227     getControlByNameAndCheckValue(SDN_C_PRE_LOAD, false, true);
228   });
229 });