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