1 import {LogService} from "../../../../utils/log/log.service";
2 import {NgRedux} from "@angular-redux/store";
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 {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
17 import {getTestBed, TestBed} from "@angular/core/testing";
18 import {UpgradeFormControlNames, VfModuleUpgradePopupService} from "./vfModule.upgrade.popuop.service";
19 import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
20 import {AppState} from "../../../../store/reducers";
21 import {instance, mock} from "ts-mockito";
22 import {GeneralActions} from "../../../../storeUtil/utils/general/general.actions";
23 import {VfModuleActions} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
24 import {ServiceActions} from "../../../../storeUtil/utils/service/service.actions";
25 import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
26 import * as _ from "lodash";
27 import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
28 import {ModalService} from "../../../customModal/services/modal.service";
30 class MockModalService<T> {}
32 class MockAppStore<T> {}
34 class MockReduxStore<T> {
42 volumeGroupAllowed: true
54 supplementaryFileName: "myFileName"
61 class MockFeatureFlagsService {}
63 describe('VFModule popup service', () => {
65 let service: VfModuleUpgradePopupService;
66 let genericFormService: GenericFormService;
67 let defaultDataGeneratorService: DefaultDataGeneratorService;
69 let iframeService: IframeService;
70 let store : NgRedux<AppState>;
71 let _sharedTreeService : SharedTreeService;
73 beforeAll(done => (async () => {
74 TestBed.configureTestingModule({
76 VfModuleUpgradePopupService,
78 SharedControllersService,
79 VfModuleControlGenerator,
80 DefaultDataGeneratorService,
88 {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
89 {provide: NgRedux, useClass: MockReduxStore},
90 {provide: HttpClient, useClass: MockAppStore},
91 {provide: ModalService, useClass: MockModalService}
94 await TestBed.compileComponents();
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 _sharedTreeService = injector.get(SharedTreeService);
103 store = injector.get(NgRedux);
108 modelName: 'vfModuleName',
109 vFModuleStoreKey: 'vfModuleId'
112 })().then(done).catch(done.fail));
114 test('getTitle should return the correct title', () => {
115 expect(service.getTitle()).toBe("Upgrade Module")
118 function findControlByName(controls: FormControlModel[], controlName: string) : FormControlModel {
119 return controls.find((control) => {
120 return control.controlName === controlName;
124 function getControlByNameAndCheckValue(controlName: string, expectedValue: any, shouldControllerExist: boolean) {
125 const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
126 const control = findControlByName(controls, controlName);
127 if(shouldControllerExist){
128 expect(control).toBeDefined();
129 expect(control.value).toEqual(expectedValue);
132 expect(control).toBeUndefined();
136 test('get controls should return retainAssignments control with true value', ()=> {
137 getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_ASSIGNMENTS, true, true);
140 test('get controls should return retainVolumeGroup control with true value', ()=> {
141 getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, true, true);
144 [true, false].forEach(notExistsOnModel => {
145 test(`retainVolumeGroup control is shown when vfModule not from model (notExistsOnModel=${notExistsOnModel})`, () => {
146 let stateCopy = _.cloneDeep(store.getState());
147 stateCopy.service.serviceHierarchy['serviceId'].vfModules['vfModuleName'].volumeGroupAllowed = false;
148 jest.spyOn(store, 'getState').mockReturnValue(stateCopy);
150 jest.spyOn(_sharedTreeService, 'isVfModuleCustomizationIdNotExistsOnModel').mockReturnValue(notExistsOnModel);
152 getControlByNameAndCheckValue(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS, true, notExistsOnModel);
156 test('get controls should contain SUPPLEMENTARY_FILE controller', ()=> {
159 const controls = service.getControls('serviceId', 'vnfStoreKey', 'vfModuleId', true);
162 const control = findControlByName(controls, SUPPLEMENTARY_FILE);
163 expect(control).toBeDefined();
164 expect(control.selectedFile).toBe("myFileName");
167 test('on submit should call merge action of form value to vfModule', () => {
171 const serviceId = "serviceId5";
172 const vnfStoreKey = 'vnfStoreKey3';
173 const modelName = 'modelA';
174 const dynamicModelName = 'dynamicModel';
192 removeClassCloseModal : jest.fn()
196 let mockFrom: FormGroup = mock(FormGroup);
197 let form = instance(mockFrom);
203 supplementaryFile_hidden_content : {
204 value: '[{"name": "c", "value": "c"}, {"name": "d", "value": "1"}]'
206 supplementaryFile_hidden : {
213 let expectedMergePayload = {
216 supplementaryFileContent: [{"name": "c", "value": "c"}, {"name": "d", "value": "1"}],
217 supplementaryFileName: "name"
220 spyOn(store, 'dispatch');
223 service.onSubmit(that, form);
226 expect(store.dispatch).toBeCalledWith(
227 {type: GeneralActions.MERGE_OBJECT_BY_PATH, path: ['serviceInstance', serviceId, 'vnfs', vnfStoreKey, 'vfModules',modelName, dynamicModelName], payload:expectedMergePayload});
228 expect(store.dispatch).toBeCalledWith(
229 {type: VfModuleActions.UPGRADE_VFMODULE, dynamicModelName: "dynamicModel", modelName: "modelA", serviceId: "serviceId5", vnfStoreKey: "vnfStoreKey3"});
230 expect(store.dispatch).toBeCalledWith({type: ServiceActions.UPGRADE_SERVICE_ACTION, serviceUuid: "serviceId5"});
235 test( 'get controls should return usePreload with false value', () => {
236 getControlByNameAndCheckValue(SDN_C_PRE_LOAD, false, true);