blob: bf9c01803ceb87a42523cfdfdf4c30e0eeb2877e [file] [log] [blame]
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");
}