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