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