import * as _ from "lodash"; import {PropertyPath} from "lodash"; describe('Drawing Board: Instantiation Templates', function () { describe('Instantiation templates ', () => { beforeEach(() => { cy.clearSessionStorage(); cy.setTestApiParamToGR(); cy.initAAIMock(); cy.initGetAAISubDetails(); cy.initVidMock(); cy.initDrawingBoardUserPermission(); cy.login(); mockAsyncBulkResponse(); }); afterEach(() => { cy.screenshot(); }); describe('Load Page and Deploy', () => { it(`Given a stored template - when click "deploy" - then a coherent request should be sent upon deploy`, () => { loadDrawingBoardWithRecreateMode(); // Then... cy.getElementByDataTestsId("node-vProbe_NC_VNF 0").should('be.visible'); assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd(); }); it('Given a stored template - when "edit" vnf and vfmodules are opened - then template’s details are visible as expected and deploy without changes', () => { loadDrawingBoardWithRecreateMode(); // Then... editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0") .getElementByDataTestsId("instanceName").should('have.value', 'hvf6arlba007') .getElementByDataTestsId("productFamily").should('contain', 'Emanuel') .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1') .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6') .getElementByDataTestsId("lineOfBusiness").should('contain', 'zzz1') .getElementByDataTestsId("rollback").should('contain', 'Rollback') .checkPlatformValue('xxx1') .getElementByDataTestsId("cancelButton").click(); editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0") .getElementByDataTestsId("instanceName").should('have.value', 'hvf6arlba007_lba_Base_01') .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6') .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1') .getElementByDataTestsId("rollback").should('contain', 'Rollback') .getElementByDataTestsId("cancelButton").click(); editNode("node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1") .getElementByDataTestsId("instanceName").should('have.value', 'my_hvf6arlba007_lba_dj_01') .getElementByDataTestsId("volumeGroupName").should('have.value', 'my_special_hvf6arlba007_lba_dj_01_vol') .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6') .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1') .getElementByDataTestsId("rollback").should('contain', 'Rollback') .getElementByDataTestsId("sdncPreLoad").should('have.value', 'on') .getElementByDataTestsId("cancelButton").click(); assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd(); }); it(`Given a stored template - when "edit" service is opened - then template’s details are visible as expected`, function () { loadDrawingBoardWithRecreateMode(); cy.openServiceContextMenu() .getElementByDataTestsId("context-menu-header-edit-item").click() .getElementByDataTestsId("instanceName").should('have.value', 'vProbe_NC_Service_DG_new_SI') .getElementByDataTestsId("subscriberName").should('contain', 'SILVIA ROBBINS') .getElementByDataTestsId("serviceType").should('contain', 'TYLER SILVIA') .getElementByDataTestsId("owningEntity").should('contain', 'WayneHolland') .getElementByDataTestsId("project").should('contain', 'WATKINS') .getElementByDataTestsId("rollback").should('contain', 'Rollback'); }); [ {desc: "with changes", modifySomeValues: true}, {desc: "without changes", modifySomeValues: false}, ].forEach((testCase) => { it(`Given a stored template - edit service vnf and vfmodule ${testCase.desc} - deploy request should be ${testCase.desc}`, function () { loadDrawingBoardWithRecreateMode(); //edit service cy.openServiceContextMenu(); cy.getElementByDataTestsId("context-menu-header-edit-item").click(); if (testCase.modifySomeValues) { cy.clearInput("instanceName"); cy.typeToInput("instanceName", "different.instance.name"); } cy.getElementByDataTestsId('form-set').click(); // edit vnf editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0"); if (testCase.modifySomeValues) { cy.selectPlatformValue('platform'); cy.selectDropdownOptionByText("tenant", "CESAR-100-D-spjg61909"); } cy.getElementByDataTestsId('form-set').click(); //edit vf module editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0"); if (testCase.modifySomeValues) { cy.getElementByDataTestsId('sdncPreLoad').click(); } cy.getElementByDataTestsId('form-set').click(); // Then... let vnfPath = [ "vnfs", "vProbe_NC_VNF 0" ]; let vfModule_0Path = [ ...vnfPath, "vfModules", "vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0", "vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0ahubg", ]; assertThatBodyFromDeployRequestEqualsToFile(testCase.modifySomeValues ? [ {path: ["instanceName"], value: "different.instance.name"}, {path: ["existingNames", "vprobe_nc_service_dg_new_si"], value: undefined}, {path: ["existingNames", "different.instance.name"], value: ""}, {path: [...vnfPath, "platformName"], value: "xxx1,platform"}, {path: [...vnfPath, "tenantId"], value: "f2f3830e4c984d45bcd00e1a04158a79"}, {path: [...vfModule_0Path, "sdncPreLoad"], value: true}, ] : []); }) }); }); }); }); function loadDrawingBoardWithRecreateMode() { const serviceModelId = '6cfeeb18-c2b0-49df-987a-da47493c8e38'; const templateUuid = "46390edd-7100-46b2-9f18-419bd24fb60b"; const drawingBoardAction = `RECREATE`; const templateTopologyEndpoint = "templateTopology"; cy.route(`**/rest/models/services/${serviceModelId}`, 'fixture:../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model.json') .as('serviceModel'); cy.route(`**/instantiationTemplates/${templateTopologyEndpoint}/${templateUuid}`, 'fixture:../../../vid-automation/src/test/resources/asyncInstantiation/templates__instance_template.json') .as('templateTopology'); // When... cy.openIframe(`app/ui/#/servicePlanning/${drawingBoardAction}` + `?jobId=${templateUuid}` + `&serviceModelId=${serviceModelId}`); cy.wait('@serviceModel'); cy.wait('@templateTopology'); } function editNode(dataTestId: string) { return cy.drawingBoardTreeOpenContextMenuByElementDataTestId(dataTestId) .drawingBoardTreeClickOnContextMenuOptionByName('Edit') } function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd() { cy.getDrawingBoardDeployBtn().click(); cy.wait('@expectedPostAsyncInstantiation').then(xhr => { cy.readFile('../vid-automation/src/test/resources/asyncInstantiation/templates__instance_template.json').then((expectedResult) => { convertRollbackOnFailureValueFromStringToBoolean(expectedResult); let xhrBodyWithoutIsDirtyField = removeIsDirtyFieldFromXhrRequestBody(xhr); cy.deepCompare(xhrBodyWithoutIsDirtyField, expectedResult); }); }); } function assertThatBodyFromDeployRequestEqualsToFile(deviationFromExpected: { path: PropertyPath, value: any }[] = []) { cy.getDrawingBoardDeployBtn().click(); cy.wait('@expectedPostAsyncInstantiation').then(xhr => { cy.readFile('../vid-automation/src/test/resources/asyncInstantiation/templates__instance_from_template__set_without_modify1.json').then((expectedResult) => { setDeviationInExpected(expectedResult, deviationFromExpected); cy.deepCompare(xhr.request.body, expectedResult); }); }); } function setDeviationInExpected(expectedResult: any, deviation: { path: PropertyPath; value: any }[]) { for (const caveat of deviation) { _.set(expectedResult, caveat.path, caveat.value); } } //We use this function because the deployService() on drawing-board-header.component class // changes rollbackOnFailure value from string type to boolean. function convertRollbackOnFailureValueFromStringToBoolean(expectedResult: any) { expectedResult.rollbackOnFailure = Boolean(expectedResult.rollbackOnFailure); } function removeIsDirtyFieldFromXhrRequestBody(xhr : any) { let xhrTempBody = JSON.parse(JSON.stringify(xhr.request.body)); delete xhrTempBody.isDirty; return xhrTempBody; } function mockAsyncBulkResponse() { cy.server().route({ url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk', method: 'POST', status: 200, response: "[]", }).as("expectedPostAsyncInstantiation"); }