it(`Given a stored template - when click "deploy" - then a coherent request should be sent upon deploy`, () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
// Then...
cy.getElementByDataTestsId("node-vProbe_NC_VNF 0").should('be.visible');
it('Given a template - User can remove existing VNF', () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+ removeVNFWithVFModules('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0');
removeVNFWithVFModules('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0');
cy.getDrawingBoardDeployBtn().click();
});
it('Given a template - User can add new VNF', () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
// add new node
addNewNode('node-vProbe_NC_VNF 0-add-btn')
.fillVnfPopup()
.getDrawingBoardDeployBtn().click()
.wait('@expectedPostAsyncInstantiation').then(xhr => {
- const vnfRequest = bodyOf(xhr).vnfs['vProbe_NC_VNF 0_1'];
-
- expect(vnfRequest.action).equals("Create");
- expect(vnfRequest.rollbackOnFailure).equals("true");
- expect(vnfRequest.originalName).equals("vProbe_NC_VNF 0");
- expect(vnfRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
- expect(vnfRequest.lcpCloudRegionId).equals("hvf6");
- expect(vnfRequest.lineOfBusiness).equals("zzz1");
- expect(vnfRequest.platformName).equals("xxx1");
- expect(vnfRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
+ const vnfRequest = bodyOf(xhr).vnfs['vProbe_NC_VNF 0_2'];
+
+ expect(vnfRequest.action).equals("Create");
+ expect(vnfRequest.rollbackOnFailure).equals("true");
+ expect(vnfRequest.originalName).equals("vProbe_NC_VNF 0");
+ expect(vnfRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+ expect(vnfRequest.lcpCloudRegionId).equals("hvf6");
+ expect(vnfRequest.lineOfBusiness).equals("zzz1");
+ expect(vnfRequest.platformName).equals("xxx1");
+ expect(vnfRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
+
+
+ // check instance name not change if empty
+ cy.editNode('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 0)
+ .clearInput('instanceName');
+ cy.getElementByDataTestsId('form-set').click({force: true}).then((done) => {
+ cy.editNode('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 0)
+ .getElementByDataTestsId('instanceName').should('be.empty')
+ });
});
});
it('Given a template - User can Duplicate VNF', () => {
const numberOfDuplicate: number = 4;
- loadDrawingBoardWithRecreateMode();
- nodeAction('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 'Duplicate')
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+ cy.nodeAction('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 'Duplicate')
.getElementByDataTestsId('duplicate-amount-vfmodules').select(numberOfDuplicate.toString())
.getTagElementContainsText('button', 'Duplicate').click()
.getDrawingBoardDeployBtn().click()
.wait('@expectedPostAsyncInstantiation').then(xhr => {
- expect(Object.keys(bodyOf(xhr).vnfs).length).equals(numberOfDuplicate + 1);
+ expect(Object.keys(bodyOf(xhr).vnfs).length).equals(numberOfDuplicate + 2);
});
});
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();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
// Then...
- editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0")
+ cy.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')
.checkPlatformValue('xxx1')
.getElementByDataTestsId("cancelButton").click();
- editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0")
+ cy.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")
+ cy.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')
assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
{path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
+ {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
]);
});
it(`Given a stored template - when "edit" service is opened - then template’s details are visible as expected`, function () {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
cy.openServiceContextMenu()
.getElementByDataTestsId("context-menu-header-edit-item").click()
});
it(`Given a stored template - add one VfModule, edit its details, and deploy - deploy is added with the vfModule details`, () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
let newVfModuleName = "new.vfmodule.name";
let module1ModelId = "VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1";
let module1CustomizationId = `vprobe_nc_vnf0..${module1ModelId}`;
// Click target VNF on right tree
- cy.getElementByDataTestsId('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0').click();
+ cy.getElementByDataTestsId('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0').first().click();
// Click [+] vfModule on left tree
cy.drawingBoardPressAddButtonByElementName(`node-${module1CustomizationId}`)
.click({force: true});
- editNode(`node-c09e4530-8fd8-418f-9483-2f57ce927b05-${module1CustomizationId}`, 1);
- cy.clearInput("instanceName");
- cy.typeToInput("instanceName", newVfModuleName);
- cy.selectDropdownOptionByText('lcpRegion', 'hvf6');
- cy.selectDropdownOptionByText('tenant', 'DN5242-Nov21-T1');
- cy.getElementByDataTestsId('form-set').click();
+ cy.editNode(`node-c09e4530-8fd8-418f-9483-2f57ce927b05-${module1CustomizationId}`, 1);
+ cy.clearInput("instanceName");
+ cy.typeToInput("instanceName", newVfModuleName);
+ cy.selectDropdownOptionByText('lcpRegion', 'hvf6');
+ cy.selectDropdownOptionByText('tenant', 'DN5242-Nov21-T1');
+ cy.getElementByDataTestsId('form-set').click();
// Then...
cy.getReduxState().then((state) => {
...vnfPath, "vfModules", module1CustomizationId,
];
- let serviceInstanceElementOnRedux = state.service.serviceInstance[serviceModelId];
+ let serviceInstanceElementOnRedux = state.service.serviceInstance[(templateWithVnfSetup.serviceModelId)];
let latestVfModule_1Path = findPathOfLatestVfModule(serviceInstanceElementOnRedux, vfModules_1Path);
// This is a funny merge, as values are already there, but that way ensures
assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
{path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
+ {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
{path: ["existingNames", newVfModuleName], value: ""},
{path: ["existingNames", `${newVfModuleName}_vol`], value: ""},
{path: latestVfModule_1Path, value: latestVfModule_1ExpectedValue},
});
+ it('Given a template - User can remove existing vfmodule', function () {
+
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+ cy.nodeAction('node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1', 'Remove');
+ let removed_vfModule_Path = [
+ ...vnfPath, "vfModules",
+ "vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1",
+ ];
+
+ assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
+ {path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
+ {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
+ {path: [...removed_vfModule_Path], value: undefined},
+ ]);
+ });
+
[
{desc: "with changes", modifySomeValues: true},
{desc: "without changes", modifySomeValues: false},
it(`Given a stored template - edit service vnf and vfmodule ${testCase.desc} - deploy request should be ${testCase.desc}`, function () {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
//edit service
cy.openServiceContextMenu();
cy.getElementByDataTestsId('form-set').click();
// edit vnf
- editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0");
+ cy.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");
+ cy.editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0");
if (testCase.modifySomeValues) {
cy.getElementByDataTestsId('sdncPreLoad').click();
}
});
+ it(`Given a stored template of Network - - it is loaded`, () => {
+
+ cy.loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup);
+
+ // Then...
+ cy.getElementByDataTestsId("node-SR-IOV Provider 2-1").should('be.visible');
+ cy.getElementByDataTestsId("node-SR-IOV Provider 2-2").should('be.visible');
+ assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network();
+ });
+
+ it(`Given a stored template of Network - User can remove existing network`, () => {
+
+ cy.loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup);
+
+ cy.nodeAction('node-01f4c475-3f89-4f00-a2f4-39a873dba0ae-SR-IOV Provider 2-1', 'Remove');
+ let removed_network_Path = [
+ "networks", "SR-IOV Provider 2-1",
+ ];
+
+ let removed_network_counter_Path = [
+ "existingNetworksCounterMap", "f6b6d141-0d4c-427d-ad35-797f3d1abe71",
+ ];
+
+ assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network([
+ {path: removed_network_Path, value: undefined},
+ {path: removed_network_counter_Path, value: 0},
+ ]);
+ });
+
+ it('Given a template - User can add a new network', () => {
+
+ cy.loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup);
+
+ // add new node
+ addNewNode('node-SR-IOV Provider 2-1-add-btn')
+ .fillNetworkPopup()
+ .getDrawingBoardDeployBtn().click()
+ .wait('@expectedPostAsyncInstantiation').then(xhr => {
+ const networkRequest = bodyOf(xhr).networks['SR-IOV Provider 2-1_1'];
+
+ expect(networkRequest.action).equals("Create");
+ expect(networkRequest.rollbackOnFailure).equals("true");
+ expect(networkRequest.originalName).equals("SR-IOV Provider 2-1");
+ expect(networkRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+ expect(networkRequest.lcpCloudRegionId).equals("hvf6");
+ expect(networkRequest.lineOfBusiness).equals("zzz1");
+ expect(networkRequest.platformName).equals("xxx1");
+ expect(networkRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
+ });
+ });
});
});
});
-const serviceModelId = '6cfeeb18-c2b0-49df-987a-da47493c8e38';
+let apiTestResources = '../vid-automation/src/test/resources/asyncInstantiation/';
+
+const templateWithVnfSetup = {
+ serviceModelId: '6cfeeb18-c2b0-49df-987a-da47493c8e38',
+ instanceTemplateFile: apiTestResources + 'templates__instance_template.json',
+ instanceTemplateSetWithoutModifyFile: apiTestResources + 'templates__instance_from_template__set_without_modify1.json',
+ serviceModelFile: '../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model.json',
+};
+
+const templateWithNetworkSetup = {
+ serviceModelId: 'a1a14610-ee40-4049-8007-0608a20dd1fa',
+ instanceTemplateFile: apiTestResources + 'templates__instance_template_network.json',
+ serviceModelFile: '../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model_network.json',
+};
const vnfPath = [
"vnfs", "vProbe_NC_VNF 0"
];
-function loadDrawingBoardWithRecreateMode() {
- 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');
-}
+const vnfPath2 = [
+ "vnfs", "vProbe_NC_VNF 0_1"
+];
-function nodeAction(dataTestId: string, action: string, index ?: number) {
- return cy.drawingBoardTreeOpenContextMenuByElementDataTestId(dataTestId, index)
- .drawingBoardTreeClickOnContextMenuOptionByName(action)
-}
-function editNode(dataTestId: string, index ?: number) {
- return nodeAction(dataTestId, 'Edit', index);
-}
function addNewNode(dataTestId: string) {
return cy.getElementByDataTestsId(dataTestId).click({force: true})
}
function removeVNFWithVFModules(dataTestId: string) {
- return nodeAction(dataTestId, 'Remove')
+ return cy.nodeAction(dataTestId, 'Remove')
.getTagElementContainsText('button', 'Remove VNF').click()
}
function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd(deviationFromExpected: { path: PropertyPath, value: any }[] = []) {
+ assertThatBodyFromDeployRequestEqualsToTemplateFromBackEndInternal(templateWithVnfSetup.instanceTemplateFile, deviationFromExpected);
+}
+
+function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network(deviationFromExpected: { path: PropertyPath, value: any }[] = []) {
+ assertThatBodyFromDeployRequestEqualsToTemplateFromBackEndInternal(templateWithNetworkSetup.instanceTemplateFile, deviationFromExpected);
+}
+
+function assertThatBodyFromDeployRequestEqualsToTemplateFromBackEndInternal(filePathOfExpected: string, deviationFromExpected: { path: PropertyPath; value: any }[]) {
cy.getDrawingBoardDeployBtn().click();
cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
- cy.readFile('../vid-automation/src/test/resources/asyncInstantiation/templates__instance_template.json').then((expectedResult) => {
+ cy.readFile(filePathOfExpected).then((expectedResult) => {
convertRollbackOnFailureValueFromStringToBoolean(expectedResult);
let xhrBodyWithoutIsDirtyField = removeIsDirtyFieldFromXhrRequestBody(xhr);
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) => {
+ cy.readFile(templateWithVnfSetup.instanceTemplateSetWithoutModifyFile).then((expectedResult) => {
setDeviationInExpected(expectedResult, deviationFromExpected);
cy.deepCompare(xhr.request.body, expectedResult);
});
url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk',
method: 'POST',
status: 200,
- response: "[]",
+ response: true,
}).as("expectedPostAsyncInstantiation");
}
+