1 ///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
2 /// <reference types="Cypress" />
3 import {JsonBuilder} from '../../support/jsonBuilders/jsonBuilder';
4 import {ServiceModel} from '../../support/jsonBuilders/models/service.model';
6 describe('A la carte', function () {
7 describe('check service name', () => {
8 let jsonBuilderAAIService: JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();
9 const SERVICE_ID: string = '4d71990b-d8ad-4510-ac61-496288d9078e';
10 const SERVICE_INVARIANT_ID: string = 'd27e42cf-087e-4d31-88ac-6c4b7585f800';
11 const INSTANCE_NAME_MANDATORY_MESSAGE: string = 'Missing data ("Instance Name" and 3 other fields';
12 const INSTANCE_NAME_NOT_MANDATORY_MESSAGE: string = 'Missing data ("Subscriber Name" and 2 other fields)';
13 const CONFIRM_BUTTON: string = 'confirmButton';
16 cy.clearSessionStorage();
18 cy.preventErrorsOnLoading();
21 cy.mockLatestVersionForService(SERVICE_ID, SERVICE_INVARIANT_ID);
22 cy.initAlaCarteService();
32 it(`service name should be mandatory : serviceEcompNaming = true`, () => {
33 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/basicService.json').then((res) => {
34 jsonBuilderAAIService.basicJson(res,
35 Cypress.config('baseUrl') + '/rest/models/services/' + SERVICE_ID,
38 SERVICE_ID + ' - service',
39 changeServiceEcompNamingToTrue);
40 checkServiceNameInputIdMandatory();
44 it(`Service a-la-carte`, () => {
46 const subscriptionServiceType: string = "TYLER SILVIA";
47 const owningEntityName: string = "WayneHolland";
48 const rollbackOnFailure: string = "true";
49 const projectName: string = "WATKINS";
50 const instanceName: string = "serviceInstanceName";
51 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
53 cy.setTestApiParamToGR();
54 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.vidNotions.instantiationType = 'ALaCarte';
55 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.inputs = null;
56 cy.setReduxState(<any>res);
57 cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
59 cy.getElementByDataTestsId("openMenuBtn").click({force: true})
60 .getElementByDataTestsId("context-menu-header-edit-item").click({force: true})
61 .getElementByDataTestsId("instanceName")
62 .getElementByDataTestsId("subscriberName")
63 .getElementByDataTestsId("serviceType")
64 .getElementByDataTestsId("owningEntity")
65 .getElementByDataTestsId("project")
66 .getElementByDataTestsId("rollback");
68 cy.selectDropdownOptionByText("subscriberName", "SILVIA ROBBINS");
69 cy.selectDropdownOptionByText("serviceType", subscriptionServiceType);
70 cy.selectDropdownOptionByText("owningEntity", owningEntityName);
71 cy.selectDropdownOptionByText("rollback", rollbackOnFailure);
72 cy.selectDropdownOptionByText("project", projectName);
73 cy.typeToInput("instanceName", instanceName);
75 cy.get('#quantity-select').should('have.attr', 'disabled');
76 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
77 cy.getReduxState().then((state) => {
78 const service = state.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'];
80 cy.readFile('../vid-automation/src/test/resources/a-la-carte/redux-a-la-carte.json').then((file) => {
81 expect(service.subscriptionServiceType).to.equals(subscriptionServiceType);
82 expect(service.owningEntityName).to.equals(owningEntityName);
83 expect(service.rollbackOnFailure).to.equals(rollbackOnFailure);
84 expect(service.projectName).to.equals(projectName);
85 expect(service.instanceName).to.equals(instanceName);
92 it(`VNF a-la-carte`, () => {
93 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json').then((res) => {
94 res['FLAG_2002_VNF_PLATFORM_MULTI_SELECT'] = true;
100 url: Cypress.config('baseUrl') + "/flags**",
102 }).as('initFlags with multi select');
106 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
107 cy.setTestApiParamToGR();
108 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.vidNotions.instantiationType = 'ALaCarte';
109 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.inputs = null;
110 cy.setReduxState(<any>res);
111 cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
113 cy.getElementByDataTestsId("openMenuBtn").click({force: true})
114 .getElementByDataTestsId("context-menu-header-edit-item").click({force: true})
115 .getElementByDataTestsId("instanceName")
116 .getElementByDataTestsId("subscriberName")
117 .getElementByDataTestsId("serviceType")
118 .getElementByDataTestsId("owningEntity")
119 .getElementByDataTestsId("project")
120 .getElementByDataTestsId("rollback");
122 cy.selectDropdownOptionByText("subscriberName", "SILVIA ROBBINS");
123 cy.selectDropdownOptionByText("serviceType", "TYLER SILVIA");
124 cy.selectDropdownOptionByText("owningEntity", "WayneHolland");
125 cy.selectDropdownOptionByText("rollback", "true");
126 cy.selectDropdownOptionByText("project", "WATKINS");
127 cy.typeToInput("instanceName", "serviceInstanceName");
129 cy.get('#quantity-select').should('have.attr', 'disabled');
130 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
131 cy.getElementByDataTestsId('node-2017-488_PASQUALE-vPE 0-add-btn').click({force: true}).then(() => {
133 cy.selectDropdownOptionByText('productFamily', 'Emanuel');
134 cy.selectDropdownOptionByText('lcpRegion', 'AAIAIC25');
135 cy.typeToInput("lcpRegionText", "just another region");
136 cy.selectDropdownOptionByText('tenant', 'USP-SIP-IC-24335-T-01');
137 cy.selectDropdownOptionByText('lineOfBusiness', 'zzz1');
139 cy.selectPlatformValue('xxx1');
141 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
143 const vnfMenuBtnDataTestId = 'node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0-menu-btn';
145 cy.getElementByDataTestsId(vnfMenuBtnDataTestId).click({force: true}).then(() => {
146 cy.getElementByDataTestsId('context-menu-edit').click({force: true});
147 cy.selectPlatformValue('platform');
148 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
149 cy.getReduxState().then((state) => {
151 const vnf = state.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].vnfs['2017-488_PASQUALE-vPE 0'];
152 cy.readFile('../vid-automation/src/test/resources/a-la-carte/redux-a-la-carte.json').then((file) => {
153 file.vnfs['2017-488_PASQUALE-vPE 0'].trackById = vnf.trackById;
154 file.vnfs['2017-488_PASQUALE-vPE 0'].vfModules = {};
155 file.vnfs['2017-488_PASQUALE-vPE 0'].upgradedVFMSonsCounter = 0;
156 cy.deepCompare(vnf, file.vnfs['2017-488_PASQUALE-vPE 0'])
167 it(`Network a-la-carte`, () => {
168 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
169 cy.setTestApiParamToGR();
170 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.vidNotions.instantiationType = 'ALaCarte';
171 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.inputs = null;
172 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].networks = {
174 "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
175 "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
176 "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
179 "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
183 "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
184 "ecomp_generated_naming": "false",
185 "exVL_naming": "{ecomp_generated_naming=true}",
186 "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
187 "network_homing": "{ecomp_selected_instance_node_target=false}"
190 "modelCustomizationName": "ExtVL 0"
193 res.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].networks = {};
194 cy.setReduxState(<any>res);
195 cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
196 cy.getElementByDataTestsId("node-ExtVL 0-add-btn").click({force: true});
198 cy.selectDropdownOptionByText("platform", "xxx1");
199 cy.selectDropdownOptionByText("lcpRegion", "AAIAIC25");
200 cy.selectDropdownOptionByText("tenant", "USP-SIP-IC-24335-T-01");
201 cy.selectDropdownOptionByText("productFamily", "ERICA");
202 cy.selectDropdownOptionByText("lineOfBusiness", "zzz1");
203 cy.typeToInput("lcpRegionText", "lcpRegionText");
205 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
206 cy.getReduxState().then((state) => {
207 const network = state.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].networks['ExtVL 0'];
209 cy.readFile('../vid-automation/src/test/resources/a-la-carte/redux-a-la-carte.json').then((file) => {
210 file.networks['ExtVL 0'].trackById = network.trackById;
211 cy.deepCompare(network, file.networks['ExtVL 0']);
218 it(`Add ALaCarte vnf where FLAG_2006_LCP_REGIONS_BY_LINE_OF_BUSINESS`, () => {
219 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
220 cy.setTestApiParamToGR();
221 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.vidNotions.instantiationType = 'ALaCarte';
222 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.inputs = null;
223 res.global['flags'] = {'FLAG_2006_LCP_REGIONS_BY_LINE_OF_BUSINESS': true};
224 cy.setReduxState(<any>res);
225 cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
227 cy.getElementByDataTestsId('node-2017-488_PASQUALE-vPE 0-add-btn').click({force: true}).then(() => {
228 cy.selectDropdownOptionByText('productFamily', 'Emanuel');
229 cy.selectDropdownOptionByText('lineOfBusiness', 'zzz1');
230 cy.selectDropdownOptionByText('lcpRegion', 'foo-name');
231 cy.selectDropdownOptionByText('tenant', 'tenantID');
232 cy.selectPlatformValue('xxx1');
233 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
234 const vnfMenuBtnDataTestId = 'node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0-menu-btn';
236 cy.getElementByDataTestsId(vnfMenuBtnDataTestId).click({force: true}).then(() => {
237 cy.getElementByDataTestsId('context-menu-edit').click({force: true})
238 .getElementByDataTestsId("lineOfBusiness").should('contain', 'zzz1')
239 .getElementByDataTestsId("lcpRegion").should('contain', 'foo-name')
240 .getElementByDataTestsId("tenant").should('contain', 'tenantName')
247 it(`Add ALaCarte VfModule Without LcpRegion Tenant Id And Legacy`, () => {
248 addAlacarteVfmoduleByFlag(true, 'redux-a-la-carte-no-lcp-tenant.json');
251 it(`Add ALaCarte VfModule With LcpRegion Tenant Id And Legacy`, () => {
252 addAlacarteVfmoduleByFlag(false, 'redux-a-la-carte.json');
255 function addAlacarteVfmoduleByFlag (flag: boolean, expectedJsonFile: string) {
256 cy.readFile('cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
257 cy.setTestApiParamToGR();
258 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.vidNotions.instantiationType = 'ALaCarte';
259 res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.inputs = null;
260 res.global['flags'] = { 'FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF' : flag };
261 cy.setReduxState(<any>res);
262 cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
264 cy.getElementByDataTestsId('node-2017-488_PASQUALE-vPE 0-add-btn').click({force: true}).then(() => {
265 cy.selectDropdownOptionByText('productFamily', 'Emanuel');
266 cy.selectDropdownOptionByText('lcpRegion', 'hvf6');
267 cy.selectDropdownOptionByText('tenant', 'AIN Web Tool-15-D-STTest2');
268 cy.selectDropdownOptionByText('lineOfBusiness', 'zzz1');
269 cy.selectPlatformValue('xxx1');
270 cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
271 const vnfName = '2017-488_PASQUALE-vPE 0';
272 let vfModulesNames: Array<string> = [
273 '2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0',
274 '2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1',
275 '2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2',
278 cy.addALaCarteVfModule(vnfName, vfModulesNames[0], 'mimazepubi', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, false, flag)
280 cy.addALaCarteVfModule(vnfName, vfModulesNames[1], 'puwesovabe', 'AAIAIC25', 'my region', 'USP-SIP-IC-24335-T-01', true, true, false, flag)
282 cy.addALaCarteVfModule(vnfName, vfModulesNames[2], 'bnmgtrx', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, true, flag)
284 cy.getReduxState().then((state) => {
285 const vfModules = state.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].vnfs[vnfName].vfModules;
286 cy.readFile('../vid-automation/src/test/resources/a-la-carte/' + expectedJsonFile).then((file) => {
287 for (let vfModulesName of vfModulesNames) {
288 const vfModule = vfModules[vfModulesName];
289 let vfModuleObject = vfModule[Object.keys(vfModule)[0]];
290 file.vnfs[vnfName].vfModules[vfModulesName][vfModulesName].action = "Create";
291 cy.deepCompare(vfModuleObject, file.vnfs[vnfName].vfModules[vfModulesName][vfModulesName]);
303 function changeServiceEcompNamingToTrue(obj: ServiceModel) {
304 obj.service.serviceEcompNaming = "true";
308 function checkServiceNameInputIdMandatory() {
309 cy.get('span').contains('Browse SDC Service Models').click({force: true})
310 .getElementByDataTestsId('deploy-' + SERVICE_ID).click({force: true})
311 .wait(1000).getElementByDataTestsId(CONFIRM_BUTTON).click({force: true})
312 .get('.error').contains(INSTANCE_NAME_MANDATORY_MESSAGE)
313 .typeToInput('instanceName', 'testService');
315 cy.getElementByDataTestsId(CONFIRM_BUTTON).click({force: true})
316 .get('.error').contains(INSTANCE_NAME_NOT_MANDATORY_MESSAGE);