4fa3ae600c8e197a45ddd0eab165bdafc0c0e69c
[vid.git] / vid-webpack-master / cypress / integration / iFrames / ala-carte.e2e.ts
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';
5
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';
14
15     beforeEach(() => {
16       cy.clearSessionStorage();
17       cy.setReduxState();
18       cy.preventErrorsOnLoading();
19       cy.initAAIMock();
20       cy.initVidMock();
21       cy.mockLatestVersionForService(SERVICE_ID, SERVICE_INVARIANT_ID);
22       cy.initAlaCarteService();
23       cy.initZones();
24       cy.login();
25     });
26
27     afterEach(() => {
28       cy.screenshot();
29     });
30
31
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,
36           200,
37           0,
38           SERVICE_ID + ' - service',
39           changeServiceEcompNamingToTrue);
40         checkServiceNameInputIdMandatory();
41       });
42     });
43
44     it(`Service a-la-carte`, () => {
45
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) => {
52
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');
58
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");
67
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);
74
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'];
79
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);
86             });
87           });
88         });
89       });
90     });
91
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;
95         cy.server()
96           .route({
97             method: 'GET',
98             delay: 0,
99             status: 200,
100             url: Cypress.config('baseUrl') + "/flags**",
101             response: res
102           }).as('initFlags with multi select');
103       });
104
105
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');
112
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");
121
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");
128
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(() => {
132
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');
138
139             cy.selectPlatformValue(`xxx1`);
140
141             cy.getElementByDataTestsId('form-set').click({force: true}).then(() => {
142
143               const vnfMenuBtnDataTestId = 'node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0-menu-btn';
144
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) => {
150
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'])
157                     });
158                   });
159                 });
160               });
161             });
162           });
163         });
164       });
165     });
166
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 = {
173           "ExtVL 0": {
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",
177             "name": "ExtVL",
178             "version": "37.0",
179             "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
180             "inputs": {},
181             "commands": {},
182             "properties": {
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}"
188             },
189             "type": "VL",
190             "modelCustomizationName": "ExtVL 0"
191           }
192         };
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});
197
198         cy.selectPlatformValue(`xxx1`);
199         cy.selectDropdownOptionByText("lcpRegion", "AAIAIC25");
200         cy.selectDropdownOptionByText("tenant", "USP-SIP-IC-24335-T-01");
201         cy.selectDropdownOptionByText("productFamily", "ERICA");
202         cy.selectMultiselectValue("multi-lineOfBusiness", "multi-lineOfBusiness-zzz1");
203         cy.typeToInput("lcpRegionText", "lcpRegionText");
204
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'];
208
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']);
212             });
213           });
214         });
215       });
216     });
217
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');
226
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';
235
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')
241             });
242           });
243         })
244       });
245     });
246
247     it(`Add ALaCarte VfModule Without LcpRegion Tenant Id And Legacy`, () => {
248       addAlacarteVfmoduleByFlag(true, 'redux-a-la-carte-no-lcp-tenant.json');
249     });
250
251     it(`Add ALaCarte VfModule With LcpRegion Tenant Id And Legacy`, () => {
252       addAlacarteVfmoduleByFlag(false, 'redux-a-la-carte.json');
253     });
254
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');
263
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',
276             ];
277
278             cy.addALaCarteVfModule(vnfName, vfModulesNames[0], 'mimazepubi', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, false, flag)
279             .then(() => {
280               cy.addALaCarteVfModule(vnfName, vfModulesNames[1], 'puwesovabe', 'AAIAIC25', 'my region', 'USP-SIP-IC-24335-T-01', true, true, false, flag)
281               .then(() => {
282                 cy.addALaCarteVfModule(vnfName, vfModulesNames[2], 'bnmgtrx', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, true, flag)
283                 .then(() => {
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]);
292                       }
293                     });
294                   });
295                 });
296               });
297             });
298           });
299         });
300       });
301     };
302
303     function changeServiceEcompNamingToTrue(obj: ServiceModel) {
304       obj.service.serviceEcompNaming = "true";
305       return obj;
306     }
307
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');
314
315       cy.getElementByDataTestsId(CONFIRM_BUTTON).click({force: true})
316         .get('.error').contains(INSTANCE_NAME_NOT_MANDATORY_MESSAGE);
317     }
318
319   });
320 });