Merge "default maven build of vid-webpack-master to run build and unit tests"
[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   BasicControlGenerator,
5   SDN_C_PRE_LOAD,
6   SUPPLEMENTARY_FILE
7 } from "../../../genericForm/formControlsServices/basic.control.generator";
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
29 class MockModalService<T> {}
30
31 class MockAppStore<T> {}
32
33 class MockReduxStore<T> {
34   getState() {
35     return {
36       service: {
37         serviceHierarchy: {
38           serviceId: {
39             vfModules: {
40               vfModuleName: {
41                 volumeGroupAllowed: true
42               }
43             }
44           }
45         },
46         serviceInstance : {
47           serviceId : {
48             vnfs : {
49               vnfStoreKey : {
50                 vfModules: {
51                   vfModuleName: {
52                     vfModuleId : {
53                       supplementaryFileName: "myFileName"
54                     }}}}}}}}
55     };
56   }
57   dispatch() {}
58 }
59
60 class MockFeatureFlagsService {}
61
62 describe('VFModule popup service', () => {
63   let injector;
64   let service: VfModuleUpgradePopupService;
65   let genericFormService: GenericFormService;
66   let defaultDataGeneratorService: DefaultDataGeneratorService;
67   let fb: FormBuilder;
68   let iframeService: IframeService;
69   let store : NgRedux<AppState>;
70
71   beforeAll(done => (async () => {
72     TestBed.configureTestingModule({
73       providers: [
74         VfModuleUpgradePopupService,
75         BasicControlGenerator,
76         VfModuleControlGenerator,
77         DefaultDataGeneratorService,
78         GenericFormService,
79         FormBuilder,
80         IframeService,
81         AaiService,
82         LogService,
83         BasicPopupService,
84         SharedTreeService,
85         {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
86         {provide: NgRedux, useClass: MockReduxStore},
87         {provide: HttpClient, useClass: MockAppStore},
88         {provide: SdcUiServices.ModalService, useClass: MockModalService}
89       ]
90     });
91     await TestBed.compileComponents();
92
93     injector = getTestBed();
94     service = injector.get(VfModuleUpgradePopupService);
95     genericFormService = injector.get(GenericFormService);
96     defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
97     fb = injector.get(FormBuilder);
98     iframeService = injector.get(IframeService);
99     store = injector.get(NgRedux);
100     service.uuidData = {
101       modelName: 'vfModuleName',
102       vFModuleStoreKey: 'vfModuleId'
103     };
104
105   })().then(done).catch(done.fail));
106
107   test('getTitle should return the correct title', () => {
108     expect(service.getTitle()).toBe("Upgrade Module")
109   });
110
111   function findControlByName(controls: FormControlModel[], controlName: string) : FormControlModel {
112     return controls.find((control) => {
113       return control.controlName === controlName;
114     });
115   }
116
117   function getControlByNameAndCheckValue(controlName: string, expectedValue: any, shouldControllerExist: boolean) {
118     const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
119     const control = findControlByName(controls, controlName);
120     if(shouldControllerExist){
121       expect(control).toBeDefined();
122       expect(control.value).toEqual(expectedValue);
123     }
124     else{
125       expect(control).toBeUndefined();
126     }
127   }
128
129   test('get controls should return retainAssignments control with true value', ()=> {
130     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_ASSIGNMENTS, true, true);
131   });
132
133   test('get controls should return retainVolumeGroup control with true value', ()=> {
134     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, true, true);
135   });
136
137   test('get controls should NOT return retainVolumeGroup control with true value', ()=> {
138     let stateCopy =_.cloneDeep(store.getState());
139     stateCopy.service.serviceHierarchy['serviceId'].vfModules['vfModuleName'].volumeGroupAllowed = false;
140     jest.spyOn(store, 'getState').mockReturnValue(stateCopy);
141     getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, null, false);
142   });
143
144   test('get controls should contain SUPPLEMENTARY_FILE controller', ()=> {
145
146     //when
147     const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
148
149     //then
150     const control = findControlByName(controls, SUPPLEMENTARY_FILE);
151     expect(control).toBeDefined();
152     expect(control.selectedFile).toBe("myFileName");
153   });
154
155   test('on submit should call merge action of form value to vfModule', () => {
156
157     //given
158
159     const serviceId = "serviceId5";
160     const vnfStoreKey = 'vnfStoreKey3';
161     const modelName = 'modelA';
162     const dynamicModelName = 'dynamicModel';
163     const that = {
164       uuidData : {
165         vfModule : {
166           data : {
167             modelName,
168             dynamicModelName
169           },
170           parent : {
171             data: {
172               vnfStoreKey
173             }}},
174         serviceId
175       },
176       serviceModel: {
177         uuid : "someUuid"
178       },
179       _iframeService: {
180         removeClassCloseModal : jest.fn()
181       }
182     };
183
184     let mockFrom: FormGroup = mock(FormGroup);
185     let form = instance(mockFrom);
186     form.value = {
187       a: "value",
188       b: "another"
189     };
190     form.controls = {
191       supplementaryFile_hidden_content : {
192         value: '{"c": "c", "d": 1}'
193         },
194       supplementaryFile_hidden : {
195         value: {
196           name: "name"
197         }
198       }
199     };
200
201     let expectedMergePayload = {
202       a: "value",
203       b: "another",
204       supplementaryFileContent: {c: "c", d: 1},
205       supplementaryFileName: "name"
206     };
207
208     spyOn(store, 'dispatch');
209
210     //when
211     service.onSubmit(that, form);
212
213     //then
214     expect(store.dispatch).toBeCalledWith(
215       {type: GeneralActions.MERGE_OBJECT_BY_PATH, path: ['serviceInstance', serviceId, 'vnfs', vnfStoreKey, 'vfModules',modelName, dynamicModelName], payload:expectedMergePayload});
216     expect(store.dispatch).toBeCalledWith(
217       {type: VfModuleActions.UPGRADE_VFMODULE, dynamicModelName: "dynamicModel", modelName: "modelA", serviceId: "serviceId5", vnfStoreKey: "vnfStoreKey3"});
218     expect(store.dispatch).toBeCalledWith({type: ServiceActions.UPGRADE_SERVICE_ACTION, serviceUuid: "serviceId5"});
219
220   });
221
222
223   test( 'get controls should return usePreload with false value', () => {
224     getControlByNameAndCheckValue(SDN_C_PRE_LOAD, false, true);
225   });
226 });