blob: d1bee9c70b50438843574f3730b621b320e96a39 [file] [log] [blame]
Ittay Sternb9d47882019-12-17 06:54:33 +02001import * as _ from "lodash";
2import {PropertyPath} from "lodash";
3
Ittay Sterne8887222019-12-01 19:38:32 +02004describe('Drawing Board: Instantiation Templates', function () {
5
Alexey Sandlerbefd7842019-12-11 10:06:31 +02006 describe('Instantiation templates ', () => {
Ittay Sterne8887222019-12-01 19:38:32 +02007
8 beforeEach(() => {
9 cy.clearSessionStorage();
Ittay Stern4bfa2df2019-12-17 14:55:04 +020010 cy.setTestApiParamToGR();
Alexey Sandlerbefd7842019-12-11 10:06:31 +020011 cy.initAAIMock();
Alexey Sandler12ceb442019-12-16 10:18:41 +020012 cy.initGetAAISubDetails();
Ittay Sterne8887222019-12-01 19:38:32 +020013 cy.initVidMock();
14 cy.initDrawingBoardUserPermission();
15 cy.login();
16
17 mockAsyncBulkResponse();
18 });
19
20 afterEach(() => {
21 cy.screenshot();
22 });
23
Alexey Sandlerbefd7842019-12-11 10:06:31 +020024 describe('Load Page and Deploy', () => {
Ittay Sterne8887222019-12-01 19:38:32 +020025
Yoav Schneiderman7b102652019-12-30 16:27:14 +020026 it(`Given a stored template - when click "deploy" - then a coherent request should be sent upon deploy`, () => {
Ittay Sterne8887222019-12-01 19:38:32 +020027
Alexey Sandlerbefd7842019-12-11 10:06:31 +020028 loadDrawingBoardWithRecreateMode();
Ittay Sterne8887222019-12-01 19:38:32 +020029
Alexey Sandlerbefd7842019-12-11 10:06:31 +020030 // Then...
31 cy.getElementByDataTestsId("node-vProbe_NC_VNF 0").should('be.visible');
32 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd();
33 });
Ittay Sterne8887222019-12-01 19:38:32 +020034
Yoav Schneiderman7b102652019-12-30 16:27:14 +020035 it('Given a template - User can remove existing VNF', () => {
36
37 loadDrawingBoardWithRecreateMode();
38
39 removeVNFWithVFModules('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0');
Eylon Malin284de1d2020-01-16 14:54:41 +020040 removeVNFWithVFModules('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0');
Yoav Schneiderman7b102652019-12-30 16:27:14 +020041
42 cy.getDrawingBoardDeployBtn().click();
43 cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
44 cy.deepCompare(bodyOf(xhr).vnfs, {});
45 });
46
47 });
48
49 it('Given a template - User can add new VNF', () => {
50 loadDrawingBoardWithRecreateMode();
51 // add new node
52 addNewNode('node-vProbe_NC_VNF 0-add-btn')
53 .fillVnfPopup()
54 .getDrawingBoardDeployBtn().click()
55 .wait('@expectedPostAsyncInstantiation').then(xhr => {
Eylon Malin284de1d2020-01-16 14:54:41 +020056 const vnfRequest = bodyOf(xhr).vnfs['vProbe_NC_VNF 0_2'];
Yoav Schneiderman7b102652019-12-30 16:27:14 +020057
Yoav Schneidermanac489f52020-01-12 13:24:46 +020058 expect(vnfRequest.action).equals("Create");
59 expect(vnfRequest.rollbackOnFailure).equals("true");
60 expect(vnfRequest.originalName).equals("vProbe_NC_VNF 0");
61 expect(vnfRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
62 expect(vnfRequest.lcpCloudRegionId).equals("hvf6");
63 expect(vnfRequest.lineOfBusiness).equals("zzz1");
64 expect(vnfRequest.platformName).equals("xxx1");
65 expect(vnfRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
66
67
68 // check instance name not change if empty
69 editNode('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 0)
70 .clearInput('instanceName');
71 cy.getElementByDataTestsId('form-set').click({force: true}).then((done) => {
72 editNode('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 0)
73 .getElementByDataTestsId('instanceName').should('be.empty')
74 });
Yoav Schneiderman7b102652019-12-30 16:27:14 +020075 });
76 });
77
78 it('Given a template - User can Duplicate VNF', () => {
79 const numberOfDuplicate: number = 4;
80 loadDrawingBoardWithRecreateMode();
81 nodeAction('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 'Duplicate')
82 .getElementByDataTestsId('duplicate-amount-vfmodules').select(numberOfDuplicate.toString())
83 .getTagElementContainsText('button', 'Duplicate').click()
84 .getDrawingBoardDeployBtn().click()
85 .wait('@expectedPostAsyncInstantiation').then(xhr => {
Eylon Malin284de1d2020-01-16 14:54:41 +020086 expect(Object.keys(bodyOf(xhr).vnfs).length).equals(numberOfDuplicate + 2);
Yoav Schneiderman7b102652019-12-30 16:27:14 +020087 });
88 });
89
Sara Weiss19bfe442019-12-17 13:20:29 +020090 it('Given a stored template - when "edit" vnf and vfmodules are opened - then template’s details are visible as expected and deploy without changes', () => {
Ittay Sterne8887222019-12-01 19:38:32 +020091
Alexey Sandlerbefd7842019-12-11 10:06:31 +020092 loadDrawingBoardWithRecreateMode();
Ittay Sterne8887222019-12-01 19:38:32 +020093
Alexey Sandlerbefd7842019-12-11 10:06:31 +020094 // Then...
Ittay Stern8f0f7282019-12-16 20:07:50 +020095 editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0")
Yoav Schneiderman7b102652019-12-30 16:27:14 +020096 .getElementByDataTestsId("instanceName").should('have.value', 'hvf6arlba007')
97 .getElementByDataTestsId("productFamily").should('contain', 'Emanuel')
98 .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1')
99 .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6')
100 .getElementByDataTestsId("lineOfBusiness").should('contain', 'zzz1')
101 .getElementByDataTestsId("rollback").should('contain', 'Rollback')
102 .checkPlatformValue('xxx1')
103 .getElementByDataTestsId("cancelButton").click();
Ittay Sterne8887222019-12-01 19:38:32 +0200104
Ittay Stern8f0f7282019-12-16 20:07:50 +0200105 editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0")
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200106 .getElementByDataTestsId("instanceName").should('have.value', 'hvf6arlba007_lba_Base_01')
107 .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6')
108 .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1')
109 .getElementByDataTestsId("rollback").should('contain', 'Rollback')
110 .getElementByDataTestsId("cancelButton").click();
Alexey Sandler46363532019-12-12 11:52:18 +0200111
Ittay Stern8f0f7282019-12-16 20:07:50 +0200112 editNode("node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1")
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200113 .getElementByDataTestsId("instanceName").should('have.value', 'my_hvf6arlba007_lba_dj_01')
114 .getElementByDataTestsId("volumeGroupName").should('have.value', 'my_special_hvf6arlba007_lba_dj_01_vol')
115 .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6')
116 .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1')
117 .getElementByDataTestsId("rollback").should('contain', 'Rollback')
118 .getElementByDataTestsId("sdncPreLoad").should('have.value', 'on')
119 .getElementByDataTestsId("cancelButton").click();
Alexey Sandler46363532019-12-12 11:52:18 +0200120
Ittay Stern18c3ce82019-12-26 15:21:17 +0200121 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
122 {path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
Eylon Malin284de1d2020-01-16 14:54:41 +0200123 {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
Ittay Stern18c3ce82019-12-26 15:21:17 +0200124 ]);
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200125 });
Ittay Sterne8887222019-12-01 19:38:32 +0200126
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200127 it(`Given a stored template - when "edit" service is opened - then template’s details are visible as expected`, function () {
Alexey Sandler46363532019-12-12 11:52:18 +0200128
129 loadDrawingBoardWithRecreateMode();
130
131 cy.openServiceContextMenu()
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200132 .getElementByDataTestsId("context-menu-header-edit-item").click()
133 .getElementByDataTestsId("instanceName").should('have.value', 'vProbe_NC_Service_DG_new_SI')
134 .getElementByDataTestsId("subscriberName").should('contain', 'SILVIA ROBBINS')
135 .getElementByDataTestsId("serviceType").should('contain', 'TYLER SILVIA')
136 .getElementByDataTestsId("owningEntity").should('contain', 'WayneHolland')
137 .getElementByDataTestsId("project").should('contain', 'WATKINS')
138 .getElementByDataTestsId("rollback").should('contain', 'Rollback');
Alexey Sandler12ceb442019-12-16 10:18:41 +0200139
Alexey Sandler12ceb442019-12-16 10:18:41 +0200140 });
Ittay Stern8f0f7282019-12-16 20:07:50 +0200141
Ittay Stern18c3ce82019-12-26 15:21:17 +0200142 it(`Given a stored template - add one VfModule, edit its details, and deploy - deploy is added with the vfModule details`, () => {
Ittay Stern58878532019-12-26 14:15:05 +0200143 loadDrawingBoardWithRecreateMode();
144
145 let newVfModuleName = "new.vfmodule.name";
146 let module1ModelId = "VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1";
147 let module1CustomizationId = `vprobe_nc_vnf0..${module1ModelId}`;
148
149 // Click target VNF on right tree
Eylon Malin284de1d2020-01-16 14:54:41 +0200150 cy.getElementByDataTestsId('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0').first().click();
Ittay Stern58878532019-12-26 14:15:05 +0200151
152 // Click [+] vfModule on left tree
153 cy.drawingBoardPressAddButtonByElementName(`node-${module1CustomizationId}`)
154 .click({force: true});
155
156 editNode(`node-c09e4530-8fd8-418f-9483-2f57ce927b05-${module1CustomizationId}`, 1);
Yoav Schneidermanac489f52020-01-12 13:24:46 +0200157 cy.clearInput("instanceName");
158 cy.typeToInput("instanceName", newVfModuleName);
159 cy.selectDropdownOptionByText('lcpRegion', 'hvf6');
160 cy.selectDropdownOptionByText('tenant', 'DN5242-Nov21-T1');
161 cy.getElementByDataTestsId('form-set').click();
Ittay Stern58878532019-12-26 14:15:05 +0200162
163 // Then...
164 cy.getReduxState().then((state) => {
Ittay Stern58878532019-12-26 14:15:05 +0200165 let vfModules_1Path = [
166 ...vnfPath, "vfModules", module1CustomizationId,
167 ];
168
Ittay Sterna4b0a602019-12-31 15:01:27 +0200169 let serviceInstanceElementOnRedux = state.service.serviceInstance[(templateWithVnfSetup.serviceModelId)];
Ittay Stern58878532019-12-26 14:15:05 +0200170 let latestVfModule_1Path = findPathOfLatestVfModule(serviceInstanceElementOnRedux, vfModules_1Path);
171
172 // This is a funny merge, as values are already there, but that way ensures
173 // the values that selected are really deployed, while limiting the cost of
174 // maintenance, by taking other vfModule's fields as granted.
175 let latestVfModule_1ExpectedValue = _.merge(
176 _.get(serviceInstanceElementOnRedux, latestVfModule_1Path),
177 {
178 instanceName: newVfModuleName,
179 volumeGroupName: `${newVfModuleName}_vol`,
180 lcpCloudRegionId: "hvf6",
181 tenantId: "4914ab0ab3a743e58f0eefdacc1dde77",
182 }
183 );
184
185 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
Ittay Stern18c3ce82019-12-26 15:21:17 +0200186 {path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
Eylon Malin284de1d2020-01-16 14:54:41 +0200187 {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
Ittay Stern58878532019-12-26 14:15:05 +0200188 {path: ["existingNames", newVfModuleName], value: ""},
189 {path: ["existingNames", `${newVfModuleName}_vol`], value: ""},
190 {path: latestVfModule_1Path, value: latestVfModule_1ExpectedValue},
191 {path: ["validationCounter"], value: null}, // side-effect
192 ]);
193 });
194
195 });
196
Einat Vinouzea79e4e02019-12-31 15:33:03 +0200197 it('Given a template - User can remove existing vfmodule', function () {
198
199 loadDrawingBoardWithRecreateMode();
200 nodeAction('node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1', 'Remove');
201 let removed_vfModule_Path = [
202 ...vnfPath, "vfModules",
203 "vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1",
204 ];
205
206 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
207 {path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
Eylon Malin284de1d2020-01-16 14:54:41 +0200208 {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
Einat Vinouzea79e4e02019-12-31 15:33:03 +0200209 {path: [...removed_vfModule_Path], value: undefined},
210 ]);
211 });
212
Ittay Sternb9d47882019-12-17 06:54:33 +0200213 [
214 {desc: "with changes", modifySomeValues: true},
215 {desc: "without changes", modifySomeValues: false},
216 ].forEach((testCase) => {
Ittay Stern8f0f7282019-12-16 20:07:50 +0200217
Ittay Sternb9d47882019-12-17 06:54:33 +0200218 it(`Given a stored template - edit service vnf and vfmodule ${testCase.desc} - deploy request should be ${testCase.desc}`, function () {
Sara Weiss19bfe442019-12-17 13:20:29 +0200219
Ittay Sternb9d47882019-12-17 06:54:33 +0200220 loadDrawingBoardWithRecreateMode();
Sara Weiss19bfe442019-12-17 13:20:29 +0200221
Ittay Sternb9d47882019-12-17 06:54:33 +0200222 //edit service
223 cy.openServiceContextMenu();
224 cy.getElementByDataTestsId("context-menu-header-edit-item").click();
225 if (testCase.modifySomeValues) {
226 cy.clearInput("instanceName");
227 cy.typeToInput("instanceName", "different.instance.name");
228 }
229 cy.getElementByDataTestsId('form-set').click();
Sara Weiss19bfe442019-12-17 13:20:29 +0200230
Ittay Sternb9d47882019-12-17 06:54:33 +0200231 // edit vnf
232 editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0");
233 if (testCase.modifySomeValues) {
234 cy.selectPlatformValue('platform');
235 cy.selectDropdownOptionByText("tenant", "CESAR-100-D-spjg61909");
236 }
237 cy.getElementByDataTestsId('form-set').click();
Sara Weiss19bfe442019-12-17 13:20:29 +0200238
Ittay Sternb9d47882019-12-17 06:54:33 +0200239 //edit vf module
240 editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0");
241 if (testCase.modifySomeValues) {
242 cy.getElementByDataTestsId('sdncPreLoad').click();
243 }
244 cy.getElementByDataTestsId('form-set').click();
Sara Weiss19bfe442019-12-17 13:20:29 +0200245
Ittay Sternb9d47882019-12-17 06:54:33 +0200246 // Then...
Ittay Sternb9d47882019-12-17 06:54:33 +0200247 let vfModule_0Path = [
248 ...vnfPath, "vfModules",
249 "vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0",
250 "vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0ahubg",
251 ];
252
253 assertThatBodyFromDeployRequestEqualsToFile(testCase.modifySomeValues ? [
254 {path: ["instanceName"], value: "different.instance.name"},
255 {path: ["existingNames", "vprobe_nc_service_dg_new_si"], value: undefined},
256 {path: ["existingNames", "different.instance.name"], value: ""},
257
258 {path: [...vnfPath, "platformName"], value: "xxx1,platform"},
259 {path: [...vnfPath, "tenantId"], value: "f2f3830e4c984d45bcd00e1a04158a79"},
260
261 {path: [...vfModule_0Path, "sdncPreLoad"], value: true},
262 ] : []);
263 })
Ittay Stern8f0f7282019-12-16 20:07:50 +0200264
Alexey Sandler46363532019-12-12 11:52:18 +0200265 });
Ittay Sternb9d47882019-12-17 06:54:33 +0200266
Yoav Schneidermanac489f52020-01-12 13:24:46 +0200267 it(`Given a stored template of Network - - it is loaded`, () => {
Ittay Sterna4b0a602019-12-31 15:01:27 +0200268
269 loadDrawingBoardWithRecreateModeNetwork();
270
271 // Then...
272 cy.getElementByDataTestsId("node-SR-IOV Provider 2-1").should('be.visible');
273 cy.getElementByDataTestsId("node-SR-IOV Provider 2-2").should('be.visible');
274 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network();
275 });
276
Yoav Schneidermanac489f52020-01-12 13:24:46 +0200277 it(`Given a stored template of Network - User can remove existing network`, () => {
Einat Vinouze6e553932020-01-01 13:40:56 +0200278
279 loadDrawingBoardWithRecreateModeNetwork();
280
281 nodeAction('node-01f4c475-3f89-4f00-a2f4-39a873dba0ae-SR-IOV Provider 2-1', 'Remove');
282 let removed_network_Path = [
283 "networks", "SR-IOV Provider 2-1",
284 ];
285
286 let removed_network_counter_Path = [
287 "existingNetworksCounterMap", "f6b6d141-0d4c-427d-ad35-797f3d1abe71",
288 ];
289
290 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network([
291 {path: removed_network_Path, value: undefined},
292 {path: removed_network_counter_Path, value: 0},
293 ]);
294 });
Ittay Sterna4b0a602019-12-31 15:01:27 +0200295
Einat Vinouze83dceaa2020-01-02 10:42:19 +0200296 it('Given a template - User can add a new network', () => {
297
298 loadDrawingBoardWithRecreateModeNetwork();
299
300 // add new node
301 addNewNode('node-SR-IOV Provider 2-1-add-btn')
Yoav Schneidermanac489f52020-01-12 13:24:46 +0200302 .fillNetworkPopup()
303 .getDrawingBoardDeployBtn().click()
304 .wait('@expectedPostAsyncInstantiation').then(xhr => {
Einat Vinouze83dceaa2020-01-02 10:42:19 +0200305 const networkRequest = bodyOf(xhr).networks['SR-IOV Provider 2-1_1'];
306
307 expect(networkRequest.action).equals("Create");
308 expect(networkRequest.rollbackOnFailure).equals("true");
309 expect(networkRequest.originalName).equals("SR-IOV Provider 2-1");
310 expect(networkRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
311 expect(networkRequest.lcpCloudRegionId).equals("hvf6");
312 expect(networkRequest.lineOfBusiness).equals("zzz1");
313 expect(networkRequest.platformName).equals("xxx1");
314 expect(networkRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
315 });
316 });
Ittay Sterne8887222019-12-01 19:38:32 +0200317 });
Ittay Sterne8887222019-12-01 19:38:32 +0200318 });
Ittay Sternb9d47882019-12-17 06:54:33 +0200319});
Ittay Sterne8887222019-12-01 19:38:32 +0200320
Ittay Sterna4b0a602019-12-31 15:01:27 +0200321let apiTestResources = '../vid-automation/src/test/resources/asyncInstantiation/';
322
323const templateWithVnfSetup = {
324 serviceModelId: '6cfeeb18-c2b0-49df-987a-da47493c8e38',
325 instanceTemplateFile: apiTestResources + 'templates__instance_template.json',
326 instanceTemplateSetWithoutModifyFile: apiTestResources + 'templates__instance_from_template__set_without_modify1.json',
327 serviceModelFile: '../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model.json',
328};
329
330const templateWithNetworkSetup = {
331 serviceModelId: 'a1a14610-ee40-4049-8007-0608a20dd1fa',
332 instanceTemplateFile: apiTestResources + 'templates__instance_template_network.json',
333 serviceModelFile: '../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model_network.json',
334};
Ittay Stern58878532019-12-26 14:15:05 +0200335
Ittay Stern18c3ce82019-12-26 15:21:17 +0200336const vnfPath = [
337 "vnfs", "vProbe_NC_VNF 0"
338];
339
Eylon Malin284de1d2020-01-16 14:54:41 +0200340const vnfPath2 = [
341 "vnfs", "vProbe_NC_VNF 0_1"
342];
343
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200344function loadDrawingBoardWithRecreateMode() {
Ittay Sterna4b0a602019-12-31 15:01:27 +0200345 loadDrawingBoardWithRecreateModeInternal(
346 '../../' + templateWithVnfSetup.instanceTemplateFile,
347 templateWithVnfSetup.serviceModelId,
348 templateWithVnfSetup.serviceModelFile);
349}
350
351function loadDrawingBoardWithRecreateModeNetwork() {
352 loadDrawingBoardWithRecreateModeInternal(
353 '../../' + templateWithNetworkSetup.instanceTemplateFile,
354 templateWithNetworkSetup.serviceModelId,
355 templateWithNetworkSetup.serviceModelFile);
356}
357
358function loadDrawingBoardWithRecreateModeInternal(instanceTemplate: string, serviceModelIdToLoad: any, serviceModel: string) {
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200359 const templateUuid = "46390edd-7100-46b2-9f18-419bd24fb60b";
360
361 const drawingBoardAction = `RECREATE`;
362 const templateTopologyEndpoint = "templateTopology";
Ittay Sterna4b0a602019-12-31 15:01:27 +0200363 cy.route(`**/rest/models/services/${serviceModelIdToLoad}`,
364 'fixture:' + serviceModel)
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200365 .as('serviceModel');
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200366
Einat Vinouzedd171b42019-12-19 14:34:19 +0200367 cy.route(`**/instantiationTemplates/${templateTopologyEndpoint}/${templateUuid}`,
Ittay Sterna4b0a602019-12-31 15:01:27 +0200368 'fixture:' + instanceTemplate)
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200369 .as('templateTopology');
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200370
371 // When...
372
373 cy.openIframe(`app/ui/#/servicePlanning/${drawingBoardAction}` +
374 `?jobId=${templateUuid}` +
Ittay Sterna4b0a602019-12-31 15:01:27 +0200375 `&serviceModelId=${serviceModelIdToLoad}`);
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200376
377 cy.wait('@serviceModel');
378 cy.wait('@templateTopology');
379}
380
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200381function nodeAction(dataTestId: string, action: string, index ?: number) {
Ittay Stern58878532019-12-26 14:15:05 +0200382 return cy.drawingBoardTreeOpenContextMenuByElementDataTestId(dataTestId, index)
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200383 .drawingBoardTreeClickOnContextMenuOptionByName(action)
384}
385
386function editNode(dataTestId: string, index ?: number) {
387 return nodeAction(dataTestId, 'Edit', index);
388}
389
390function addNewNode(dataTestId: string) {
391 return cy.getElementByDataTestsId(dataTestId).click({force: true})
392}
393
394function removeVNFWithVFModules(dataTestId: string) {
395 return nodeAction(dataTestId, 'Remove')
396 .getTagElementContainsText('button', 'Remove VNF').click()
Ittay Stern8f0f7282019-12-16 20:07:50 +0200397}
398
Ittay Stern58878532019-12-26 14:15:05 +0200399function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd(deviationFromExpected: { path: PropertyPath, value: any }[] = []) {
Ittay Sterna4b0a602019-12-31 15:01:27 +0200400 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEndInternal(templateWithVnfSetup.instanceTemplateFile, deviationFromExpected);
401}
402
403function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network(deviationFromExpected: { path: PropertyPath, value: any }[] = []) {
404 assertThatBodyFromDeployRequestEqualsToTemplateFromBackEndInternal(templateWithNetworkSetup.instanceTemplateFile, deviationFromExpected);
405}
406
407function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEndInternal(filePathOfExpected: string, deviationFromExpected: { path: PropertyPath; value: any }[]) {
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200408 cy.getDrawingBoardDeployBtn().click();
409 cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
Ittay Sterna4b0a602019-12-31 15:01:27 +0200410 cy.readFile(filePathOfExpected).then((expectedResult) => {
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200411 convertRollbackOnFailureValueFromStringToBoolean(expectedResult);
412
413 let xhrBodyWithoutIsDirtyField = removeIsDirtyFieldFromXhrRequestBody(xhr);
Ittay Stern58878532019-12-26 14:15:05 +0200414 setDeviationInExpected(expectedResult, deviationFromExpected);
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200415 cy.deepCompare(xhrBodyWithoutIsDirtyField, expectedResult);
416 });
417 });
418}
419
Sara Weiss19bfe442019-12-17 13:20:29 +0200420
Ittay Sternb9d47882019-12-17 06:54:33 +0200421function assertThatBodyFromDeployRequestEqualsToFile(deviationFromExpected: { path: PropertyPath, value: any }[] = []) {
Sara Weiss19bfe442019-12-17 13:20:29 +0200422 cy.getDrawingBoardDeployBtn().click();
423 cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
424
Ittay Sterna4b0a602019-12-31 15:01:27 +0200425 cy.readFile(templateWithVnfSetup.instanceTemplateSetWithoutModifyFile).then((expectedResult) => {
Ittay Sternb9d47882019-12-17 06:54:33 +0200426 setDeviationInExpected(expectedResult, deviationFromExpected);
Sara Weiss19bfe442019-12-17 13:20:29 +0200427 cy.deepCompare(xhr.request.body, expectedResult);
428 });
429
430 });
431}
432
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200433function bodyOf(xhr: Cypress.WaitXHR) {
434 return JSON.parse(JSON.stringify(xhr.request.body));
435}
436
Ittay Stern58878532019-12-26 14:15:05 +0200437function setDeviationInExpected(expectedResult: any, deviations: { path: PropertyPath; value: any }[]) {
438 for (const deviation of deviations) {
439 _.set(expectedResult, deviation.path, deviation.value);
Ittay Sternb9d47882019-12-17 06:54:33 +0200440 }
441}
442
Ittay Stern58878532019-12-26 14:15:05 +0200443function findPathOfLatestVfModule(serviceInstanceElementFromRedux: any, vfModulesContainerPath: string[]) {
444 let latestVfModuleRandomlySelectedKey: string = _.last(_.keys(
445 _.get(serviceInstanceElementFromRedux, vfModulesContainerPath)
446 )) as string;
447
448 return [...vfModulesContainerPath, latestVfModuleRandomlySelectedKey];
449}
450
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200451//We use this function because the deployService() on drawing-board-header.component class
452// changes rollbackOnFailure value from string type to boolean.
453function convertRollbackOnFailureValueFromStringToBoolean(expectedResult: any) {
454 expectedResult.rollbackOnFailure = Boolean(expectedResult.rollbackOnFailure);
455}
Ittay Sterne8887222019-12-01 19:38:32 +0200456
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200457function removeIsDirtyFieldFromXhrRequestBody(xhr: any) {
458 let xhrTempBody = bodyOf(xhr);
Alexey Sandlerbefd7842019-12-11 10:06:31 +0200459 delete xhrTempBody.isDirty;
460 return xhrTempBody;
461}
462
Yoav Schneiderman7b102652019-12-30 16:27:14 +0200463function mockAsyncBulkResponse() {
464 cy.server().route({
465 url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk',
466 method: 'POST',
467 status: 200,
468 response: "[]",
469 }).as("expectedPostAsyncInstantiation");
470}