1 package vid.automation.test.test;
3 import static java.util.Collections.emptyList;
4 import static junit.framework.TestCase.assertNull;
5 import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
6 import static org.hamcrest.CoreMatchers.startsWith;
7 import static org.hamcrest.MatcherAssert.assertThat;
8 import static org.hamcrest.Matchers.containsInAnyOrder;
9 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC;
10 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC;
11 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
12 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID;
13 import static org.testng.Assert.assertEquals;
14 import static org.testng.AssertJUnit.assertNotNull;
15 import static org.testng.AssertJUnit.assertTrue;
16 import static vid.automation.test.infra.Features.FLAG_1902_VNF_GROUPING;
17 import static vid.automation.test.infra.Features.FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI;
18 import static vid.automation.test.infra.Features.FLAG_1908_INFRASTRUCTURE_VPN;
19 import static vid.automation.test.infra.Features.FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT;
20 import static vid.automation.test.infra.Features.FLAG_1908_TRANSPORT_SERVICE_NEW_INSTANTIATION_UI;
21 import static vid.automation.test.infra.Features.FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI;
22 import static vid.automation.test.infra.Features.FLAG_5G_IN_NEW_INSTANTIATION_UI;
23 import static vid.automation.test.infra.Features.FLAG_ENABLE_WEBPACK_MODERN_UI;
24 import static vid.automation.test.infra.ModelInfo.aLaCarteNetworkProvider5G;
25 import static vid.automation.test.infra.ModelInfo.aLaCarteVnfGroupingService;
26 import static vid.automation.test.infra.ModelInfo.collectionResourceService;
27 import static vid.automation.test.infra.ModelInfo.infrastructureVpnService;
28 import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails;
29 import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse;
30 import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse;
31 import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails;
32 import static vid.automation.test.infra.ModelInfo.transportWithPnfsService;
33 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
34 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
35 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
36 import static vid.automation.test.test.ALaCarteflowTest.AIC;
38 import com.google.common.collect.ImmutableList;
39 import com.google.common.collect.ImmutableMap;
40 import com.google.common.collect.ImmutableSet;
41 import java.text.ParseException;
42 import java.text.SimpleDateFormat;
43 import java.util.ArrayList;
44 import java.util.Arrays;
45 import java.util.Collections;
46 import java.util.Date;
47 import java.util.HashMap;
48 import java.util.List;
51 import java.util.stream.Collectors;
52 import org.apache.commons.lang3.mutable.MutableInt;
53 import org.apache.logging.log4j.LogManager;
54 import org.apache.logging.log4j.Logger;
55 import org.hamcrest.Matchers;
56 import org.onap.sdc.ci.tests.datatypes.UserCredentials;
57 import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
58 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetL3NetworksByCloudRegionSpecificState;
59 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetTenants;
60 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetVpnsByType;
61 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIPostNamedQueryForViewEdit;
62 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
63 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarte5G;
64 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceAlacarte;
65 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService;
66 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse;
67 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteE2E;
68 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteE2E;
69 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
70 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork;
71 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork.ResponseDetails;
72 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
73 import org.onap.simulator.presetGenerator.presets.mso.PresetMsoCreateMacroCommonPre1806;
74 import org.openqa.selenium.By;
75 import org.openqa.selenium.WebElement;
76 import org.openqa.selenium.remote.RemoteWebElement;
77 import org.testng.Assert;
78 import org.testng.annotations.AfterClass;
79 import org.testng.annotations.BeforeClass;
80 import org.testng.annotations.BeforeMethod;
81 import org.testng.annotations.Test;
82 import vid.automation.test.Constants;
83 import vid.automation.test.Constants.BrowseASDC.NewServicePopup;
84 import vid.automation.test.infra.Click;
85 import vid.automation.test.infra.FeatureTogglingTest;
86 import vid.automation.test.infra.Features;
87 import vid.automation.test.infra.Get;
88 import vid.automation.test.infra.Input;
89 import vid.automation.test.infra.ModelInfo;
90 import vid.automation.test.infra.ModelInfoWithCustomization;
91 import vid.automation.test.infra.SelectOption;
92 import vid.automation.test.infra.Wait;
93 import vid.automation.test.model.Service;
94 import vid.automation.test.model.User;
95 import vid.automation.test.sections.BrowseASDCPage;
96 import vid.automation.test.sections.DrawingBoardPage;
97 import vid.automation.test.sections.InstantiationStatusPage;
98 import vid.automation.test.sections.SideMenu;
99 import vid.automation.test.sections.VidBasePage;
100 import vid.automation.test.services.AsyncJobsService;
101 import vid.automation.test.services.ServicesService;
102 import vid.automation.test.services.SimulatorApi;
103 import vid.automation.test.test.NewServiceInstanceTest.ServiceData.IS_GENERATED_NAMING;
104 import vid.automation.test.utils.ReadFile;
106 @FeatureTogglingTest(FLAG_ENABLE_WEBPACK_MODERN_UI)
107 public class NewServiceInstanceTest extends ModernUITestBase {
109 public static final String COMPLETED = "COMPLETED";
110 private static final String IN_PROGRESS = "IN_PROGRESS";
111 private static final String PENDING = "PENDING";
112 private final String vfModule0Name = "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0";
113 private final String vfModule0UUID = "f8360508-3f17-4414-a2ed-6bc71161e8db";
114 private ServicesService servicesService = new ServicesService();
115 private DrawingBoardPage drawingBoardPage = new DrawingBoardPage();
116 List<String> serviceModelLabelList = Arrays.asList("Model version", "Description", "Category", "UUID",
117 "Invariant UUID", "Service type", "Service role");
118 List<String> mandatoryServiceModelLabelList = Arrays.asList("Model version", "UUID", "Invariant UUID");
119 private final VidBasePage vidBasePage = new VidBasePage();
120 public static final String VNF_SET_BUTTON_TEST_ID = "form-set";
121 private static final Logger logger = LogManager.getLogger(NewServiceInstanceTest.class);
122 private static final String NO_MAX_INSTANCES_IN_MODEL = "NO_MAX_INSTANCES_IN_MODEL";
125 protected void dropAllAsyncJobs() {
126 AsyncJobsService asyncJobsService = new AsyncJobsService();
127 asyncJobsService.dropAllAsyncJobs();
131 protected void muteAllAsyncJobs() {
132 AsyncJobsService asyncJobsService = new AsyncJobsService();
133 asyncJobsService.muteAllAsyncJobs();
137 protected void goToWelcome() {
138 SideMenu.navigateToWelcomePage();
142 protected UserCredentials getUserCredentials() {
143 String userName = Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA;
144 User user = usersService.getUser(userName);
145 return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
149 public void createNewServiceInstance_fullModelData_LeftPaneLabelsCorrect() throws Exception {
150 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
151 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
152 assertServiceModelLabelsCorrect(serviceModelLabelList);
156 public void createNewServiceInstance_partialModelData_LeftPaneLabelsCorrect() throws Exception {
157 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
158 loadServicePopup(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails);
159 assertServiceModelLabelsCorrect(mandatoryServiceModelLabelList);
163 public void createNewServiceInstance_setFieldValue_resetDependenciesListsAndValues() {
164 resetGetTenantsCache();
166 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
167 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
168 SimulatorApi.registerExpectation(Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_CAR_2020_ER, SimulatorApi.RegistrationStrategy.APPEND);
169 registerExpectationFromPreset(
170 new PresetAAIGetTenants(
172 "MSO-dev-service-type",
173 "registration_to_simulator/create_new_instance/aai_get_tenants_for_customer_CAR_2020_ER.json"),
174 SimulatorApi.RegistrationStrategy.APPEND);
176 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
177 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
178 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
179 GeneralUIUtils.ultimateWait();
180 String serviceType = "TYLER SILVIA";
181 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
182 browseASDCPage.selectServiceTypeByName(serviceType);
183 String lcpRegion = "hvf6";
184 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
185 viewEditPage.selectLcpRegion(lcpRegion, AIC);
186 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
188 VidBasePage.selectSubscriberById("CAR_2020_ER");
189 assertElementDisabled("lcpRegion-select");
190 serviceType = "MSO-dev-service-type";
191 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
192 browseASDCPage.selectServiceTypeByName(serviceType);
193 lcpRegion = "CAR_2020_ER";
194 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
195 viewEditPage.selectLcpRegion(lcpRegion, AIC);
196 browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e66");
198 resetGetTenantsCache();
203 * asserts that the provided labels list is visible and that no other detail item appears in the model details panel.
205 protected void assertServiceModelLabelsCorrect(List<String> serviceModelLabelList) throws Exception {
206 WebElement genericPopup = getDriver().findElement(By.tagName("generic-form-popup"));
207 WebElement modelInformation = genericPopup.findElement(By.id("model-information"));
208 List<WebElement> modelInformationItems = modelInformation.findElements(By.xpath("./div"));
209 assertEquals(modelInformationItems.size(), serviceModelLabelList.size());
210 serviceModelLabelList.forEach(label -> {
211 WebElement webElement = Get.byTestId("model-item-" + label);
212 WebElement itemWarpper = webElement.findElements(By.className("wrapper")).get(0);
213 assertEquals(itemWarpper.findElements(By.tagName("label")).get(0).getText(), label, "model details item label is incorrect.");
218 public void createNewServiceInstance_leftPane_serviceModelDataCorrect() {
219 Service service = servicesService.getService(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId);
220 String prefix = NewServicePopup.SERVICE_MODEL_DATA_TEST_ID_VALUE_PREFIX;
221 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
222 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
223 logger.info("Expected service model properties: "+service.toString());
224 assertModelDataCorrect(NewServicePopup.SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID, prefix, service);
228 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingFalse() {
230 ServiceData serviceData = new ServiceData(
231 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
233 IS_GENERATED_NAMING.FALSE, true, true, true,
234 "2017-488_PASQUALE-vPE 0",
235 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
236 0, NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5", false);
238 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
240 final String serviceInstanceName = createMacroService(serviceData, true);
241 createVnf(serviceData, true, serviceInstanceName);
243 createVfModule(serviceData, serviceInstanceName, false, false);
247 @Test(groups = "underDevelopment")
248 public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_DEV() {
250 Upon failure in test dynamicFieldsEcompNamingFalse_FLESH(), exception will provide
251 the needed data for this DEV method:
253 1. "Current step" when the failure occurred
254 2. "Random alphabetic" that was randomized while test
255 3. "Starting reduxState" that was on the step that failed.
257 These data can be used for, accordingly, 1. startInStep param; 2, randomAlphabetic
258 param; 3. reduxForStep param.
261 // It should be easier to put `reduxForStep` in this file, to avoid Java's code-clutter and json escaping.
262 final String reduxForStep = ReadFile.loadResourceAsString(
263 "NewServiceInstanceTest/createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse.json");
265 createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("DEV", 5, reduxForStep, "mCaNk");
269 public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse() {
270 createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("RUNTIME", 0, null, randomAlphabetic(5));
273 private void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH(String mode, int startInStep, String reduxForStep, String randomAlphabetic) {
275 MutableInt i = new MutableInt();
276 Map<String, String> reduxStates = new HashMap<>();
278 ServiceData serviceData = new ServiceData(
279 macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse.modelVersionId,
280 Collections.singletonList("2017488 pasqualevpe0 asn:"),
281 IS_GENERATED_NAMING.FALSE, false, true, false,
282 "2017-488_PASQUALE-vPE 0",
283 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
284 NO_MAX_INSTANCES_IN_MODEL, ImmutableList.of("Bandwidth", "Bandwidth units"),
285 "25284168-24bb-4698-8cb4-3f509146eca5", false);
287 // this is the instance-name that createMacroService is going to use
288 String serviceInstanceName = randomAlphabetic + "instancename";
290 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
291 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
293 createMacroService(serviceData, false, randomAlphabetic, true, 3);
296 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
297 createVnf(serviceData, false, serviceInstanceName)
300 final String vnfInstanceName2 = randomAlphabetic + "instanceName";
301 final String vnfName2 = "2017-388_PASQUALE-vPE";
303 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
304 createVnf(new VnfData(vnfName2 + " 0", "afacccf6-397d-45d6-b5ae-94c39734b168", vnfInstanceName2, false),
305 false, serviceInstanceName)
308 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
309 createVfModule(serviceData, serviceInstanceName, false, true)
312 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
314 editVfModuleAndJustSetName(vfModule0Name, vfModule0UUID);
315 duplicateVnf(serviceData.vnfData, 2);
316 vidBasePage.screenshotDeployDialog(serviceInstanceName);
319 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
320 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
323 final String vfModuleName1 = "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0";
324 final String vfModuleName2 = "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1";
325 final String request1 = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
326 final String request2 = "ce010256-3fdd-4cb5-aed7-37112a2c6e93";
327 final ImmutableMap<Keys, String> vars = ImmutableMap.<Keys, String>builder()
328 .put(Keys.SERVICE_NAME, serviceInstanceName)
329 .put(Keys.VNF_NAME, cleanSeparators("2017-488_PASQUALE-vPE", serviceData.vnfData.vnfInstanceName))
330 .put(Keys.VFM_NAME1, cleanSeparators(vfModuleName1 , "VF instance name ZERO"))
331 .put(Keys.VFM_NAME2, cleanSeparators(vfModuleName2 , "VF instance name"))
332 .put(Keys.VG_NAME, cleanSeparators(vfModuleName2 , "VF instance name") + "_vol_abc")
333 .put(Keys.VNF_NAME2, cleanSeparators(vnfName2, vnfInstanceName2))
335 registerExpectationFromPresets(ImmutableList.of(
336 // although "some legacy region" is provided for vnf, Service's region "hvf6" overrides it
337 PRESET_MTN6_TO_ATT_AIC,
338 new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 0, request1),
339 new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 1, request2)
340 ), SimulatorApi.RegistrationStrategy.APPEND);
342 deployAndVerifyModuleInPendingTableMacro(serviceInstanceName, request1, request2);
343 verifyOpenAuditInfo(serviceInstanceName);
344 verifyOpenViewEdit(serviceInstanceName);
345 verifyDeleteJob(serviceInstanceName);
346 verifyHideJob(serviceInstanceName);
351 @FeatureTogglingTest(FLAG_1908_INFRASTRUCTURE_VPN)
352 public void createNewServiceInstance_infraStructureVpn() {
353 String requestId = uuid();
354 String instanceId = uuid();
356 prepareServicePreset(infrastructureVpnService, false);
358 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
359 PRESET_MTN6_TO_ATT_AIC,
360 new PresetAAIGetL3NetworksByCloudRegionSpecificState("irma-aic", "hvf6", "bae71557c5bb4d5aac6743a4e5f1d054"),
361 new PresetAAIGetVpnsByType()
364 ServiceData serviceData = new ServiceData(
365 infrastructureVpnService.modelVersionId,
367 IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY, true, true, false,
369 null, 0, null, new ArrayList<>(), null, false);
370 final String serviceInstanceName = createMacroService(serviceData, false);
372 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
373 PresetMsoCreateMacroCommonPre1806.ofServiceWithVRF(requestId, instanceId, serviceInstanceName),
374 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
377 // Wizard pages of Network and VPN
378 Click.byTestIdOnceItsAvailable("10a74149-c9d7-4918-bbcf-d5fb9b1799ce", 20);
379 clickToCloseModal("setMembersBtn");
381 Click.byTestIdOnceItsAvailable("120d39fb-3627-473d-913c-d228dd0f8e5b", 20);
382 clickToCloseModal("setMembersBtn");
384 Assert.assertEquals(Get.byTestId("node-type-indicator").getText(),"VRF");
386 drawingBoardPage.deploy();
387 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "Service "+serviceInstanceName);
391 @FeatureTogglingTest(FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI)
392 public void createNewServiceInstance_collectionResource() {
393 prepareServicePreset(collectionResourceService, false);
394 String requestId = uuid();
395 String instanceId = uuid();
397 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
398 PRESET_MTN6_TO_ATT_AIC,
399 PresetMsoCreateMacroCommonPre1806.ofCollectionResource(requestId, instanceId),
400 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
403 ServiceData serviceData = new ServiceData(
404 collectionResourceService.modelVersionId,
406 IS_GENERATED_NAMING.TRUE, true, true, false,
408 null, 0, null, new ArrayList<>(), null, false);
409 createMacroService(serviceData, false, randomAlphabetic(5), true, 1);
411 drawingBoardPage.deploy();
412 drawingBoardPage.verifyServiceCompletedOnTime("CR_sanity", "service with collection resource");
416 @FeatureTogglingTest(FLAG_1908_TRANSPORT_SERVICE_NEW_INSTANTIATION_UI)
417 public void createNewServiceInstance_transportService() {
418 prepareServicePreset(transportWithPnfsService, false);
419 String requestId = uuid();
420 String instanceId = uuid();
422 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
423 PresetMsoCreateMacroCommonPre1806.ofTransportService(requestId, instanceId),
424 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
427 ServiceData serviceData = new ServiceData(
428 transportWithPnfsService.modelVersionId,
430 IS_GENERATED_NAMING.TRUE, true, true, false,
432 null, 0, null, new ArrayList<>(), null, false);
433 createMacroService(serviceData, false, randomAlphabetic(5), false, 1);
435 drawingBoardPage.deploy();
436 drawingBoardPage.verifyServiceCompletedOnTime("AIM Transport SVC_ym161f", "transport service");
440 @FeatureTogglingTest(FLAG_1902_VNF_GROUPING)
441 public void createNewServiceInstance_aLaCarte_VnfGrouping() {
443 String randomAlphabetic = randomAlphabetic(5);
445 ServiceData serviceData = new ServiceData(
446 aLaCarteVnfGroupingService.modelVersionId,
448 IS_GENERATED_NAMING.FALSE, false, true, false,
449 null, null, 0, null, ImmutableList.of(), null, false);
450 prepareServicePreset(aLaCarteVnfGroupingService, false);
452 createALaCarteService(serviceData, randomAlphabetic);
454 // this is the instance-name that createALaCarteService is using
455 String serviceInstanceName = randomAlphabetic + "instancename";
457 final String requestId = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
458 final String serviceInstanceId = "d2391436-8d55-4fde-b4d5-72dd2cf13cgh";
459 final ImmutableMap<Keys, String> names = ImmutableMap.<Keys, String>builder()
460 .put(Keys.SERVICE_NAME, serviceInstanceName)
462 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
463 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, requestId, serviceInstanceId, "us16807000"),
464 new PresetAAIPostNamedQueryForViewEdit(serviceInstanceId, serviceInstanceName, false, false)
465 ), SimulatorApi.RegistrationStrategy.APPEND);
467 drawingBoardPage.deploy();
468 verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(IN_PROGRESS), false, false);
469 verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(COMPLETED), false, true);
470 InstantiationStatusPage.verifyOpenNewViewEdit(serviceInstanceName, serviceInstanceId, aLaCarteVnfGroupingService.modelVersionId, "TYLER SILVIA", "e433710f-9217-458d-a79d-1c7aff376d89", "EDIT");
473 public interface Invoker{
477 private void doReduxStep(Map<String, String> reduxStates, String randomAlphabetic, int startInStep, String reduxForStep, MutableInt currentStep, String mode, Invoker todo) {
481 if (currentStep.getValue() < startInStep) {
482 // skip up to startInStep
484 } else if (currentStep.getValue() == startInStep) {
486 vidBasePage.setReduxState(reduxForStep);
488 vidBasePage.navigateTo("serviceModels.htm#/servicePlanning?serviceModelId=6b528779-44a3-4472-bdff-9cd15ec93450");
489 vidBasePage.goToIframe();
492 reduxStates.put(String.valueOf(currentStep), vidBasePage.getReduxState());
497 // log current redux state, before invocation
498 reduxStates.put(String.valueOf(currentStep), vidBasePage.getReduxState());
499 logger.info("reduxGator runtime reduxState for step {}:\n{}", currentStep, vidBasePage.getReduxState());
505 } catch (AssertionError | Exception e) {
506 throw new AssertionError(String.join("\n",
507 "Current step: " + currentStep,
508 "Random alphabetic: " + randomAlphabetic,
509 "Starting reduxState: " + reduxStates.get(String.valueOf(currentStep)),
510 "Current reduxState: " + vidBasePage.getReduxState()
514 logger.info("Cumulative reduxState: {}", reduxStates);
515 currentStep.increment();
519 //@Step("duplicate vnf")
520 private void duplicateVnf(VnfData vnfData, int count) {
521 hoverAndClickDuplicateButton(extractNodeToEdit(vnfData));
522 vidBasePage.screenshotDeployDialog("duplicateVnf-" + vnfData.vnfName);
523 List<WebElement> options = ((RemoteWebElement)Get.byId("duplicate-select")).findElementsByTagName("option");
524 assertThat(options.stream().map(x -> x.getText()).collect(Collectors.toList()), Matchers.contains("1","2"));
525 SelectOption.byIdAndVisibleText("duplicate-select", String.valueOf(count));
526 Click.byClassAndVisibleText("sdc-button__primary", "DUPLICATE");
529 private String cleanSeparators(String... s) {
530 return String.join("", s).replace(" ", "");
533 //@Step("edit vf module and just set name")
534 private void editVfModuleAndJustSetName(String vfModuleName, String vfModuleUUID) {
535 hoverAndClickEditButton(vfModuleUUID + "-" + vfModuleName);
536 Input.text("VF instance name ZERO", "instanceName");
537 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
541 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfTrue_vgNameFalse() {
542 ServiceData serviceData = new ServiceData(
543 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
545 IS_GENERATED_NAMING.FALSE, true, false, true,
546 "2017-488_PASQUALE-vPE 0",
547 vfModule0Name, 1, "1", new ArrayList<>(), vfModule0UUID, false);
549 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
551 final String serviceInstanceName = createMacroService(serviceData, true);
552 createVnf(serviceData, true, serviceInstanceName);
553 createVfModule(serviceData, serviceInstanceName, true, false);
558 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameFalse() {
559 ServiceData serviceData = new ServiceData(
560 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
562 IS_GENERATED_NAMING.FALSE, false, false, false,
563 "2017-488_PASQUALE-vPE 0",
564 vfModule0Name, 1, "1", new ArrayList<>(), vfModule0UUID, false);
566 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
568 final String serviceInstanceName = createMacroService(serviceData, true);
569 createVnf(serviceData, true, serviceInstanceName);
570 createVfModule(serviceData, serviceInstanceName, true, false);
575 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameTrue() throws Exception {
576 ServiceData serviceData = new ServiceData(
577 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
579 IS_GENERATED_NAMING.FALSE, false, true, false,
580 "2017-488_PASQUALE-vPE 0",
581 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
582 NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5", false);
584 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
586 final String serviceInstanceName = createMacroService(serviceData, true);
587 createVnf(serviceData, true, serviceInstanceName);
588 clickRemoveVfModule(vfModule0UUID, vfModule0Name);
589 createVfModule(serviceData, serviceInstanceName, false, true);
594 @FeatureTogglingTest(FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI)
595 public void createNewServiceInstance_aLaCarte_WithVnf() {
596 final ModelInfo serviceModelInfo = ModelInfo.aLaCarteServiceCreationNewUI;
597 String serviceInstanceName = "ALaCarteWithVnf"+randomAlphabetic(5);
598 String vnfInstanceName= "VnfForALaCarte"+randomAlphabetic(5);
599 VnfData vnfData = new VnfData("vOCG_1804_VF 0", "aca3f7b1-15f9-45a5-b182-b8b5aca84a76", vnfInstanceName, true);
600 VfData vfmData = new VfData("vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0", false, 1, "1", emptyList(), "815db6e5-bdfd-4cb6-9575-82c36df8747a", null);
601 ServiceData serviceData = new ServiceData(IS_GENERATED_NAMING.TRUE, vnfData, vfmData, true);
603 resetGetServicesCache();
605 prepareServicePreset(serviceModelInfo, true);
607 String requestorID = getUserCredentials().getUserId();
609 String serviceRequestId = uuid();
610 String serviceInstanceId = uuid();
611 String vnfRequestId = uuid();
612 String vnfInstanceId = uuid();
613 String vfm0RequestId = uuid();
614 String vfm0InstanceId = uuid();
615 String vg1RequestId = uuid();
616 String vg1InstanceId = uuid();
617 String vfm1RequestId = uuid();
618 String vfm1InstanceId = uuid();
619 String vfm12RequestId = uuid();
620 String vfm12InstanceId = uuid();
622 ModelInfoWithCustomization vfm0 = new ModelInfoWithCustomization(
623 "815db6e5-bdfd-4cb6-9575-82c36df8747a",
624 "e9c795c8-6b98-4db3-bd90-a84b8ca5181b",
625 "Vocg1804Vf..base_ocg..module-0",
628 "Vocg1804Vf..base_ocg..module-0",
629 "a7b333d7-7633-4197-b40d-80fcfcadee94");
631 ModelInfoWithCustomization vg1 = new ModelInfoWithCustomization(
632 "9c219e70-1177-494b-8977-1395c9f9168c",
633 "0ad14d60-98b6-4575-a9b8-458a796c3f98",
634 "Vocg1804Vf..ocgmgr..module-1",
637 "Vocg1804Vf..ocgmgr..module-1",
638 "f332f3ce-434d-4084-a1e7-5261c16d4940"
641 ModelInfoWithCustomization vfm1 = new ModelInfoWithCustomization(
642 "9c219e70-1177-494b-8977-1395c9f9168c",
643 "0ad14d60-98b6-4575-a9b8-458a796c3f98",
644 "Vocg1804Vf..ocgmgr..module-1",
647 "Vocg1804Vf..ocgmgr..module-1",
648 "f332f3ce-434d-4084-a1e7-5261c16d4940"
651 ModelInfoWithCustomization vfm12 = new ModelInfoWithCustomization(
652 "b601eef4-62fd-4201-a788-ae30e06a1aec",
653 "e3cb8b85-7a3c-4897-b20b-70640c26d671",
654 "Vocg1804Vf..ocgapp_001..module-12",
657 "Vocg1804Vf..ocgapp_001..module-12",
658 "fcc82961-865e-4d38-9c7a-207c511405b6"
661 final String vgName = "vg_for_module1";
663 String vgRelatedInstance = ",{\"relatedInstance\": {"
664 + " \"modelInfo\": {"
665 + " \"modelType\": \"volumeGroup\""
667 + " \"instanceId\": \""+vg1InstanceId+"\","
668 + " \"instanceName\": \""+vgName+"\""
672 registerExpectationFromPresets(
674 new PresetMSOCreateServiceInstanceAlacarte(
675 ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
676 serviceRequestId, serviceInstanceId,
677 requestorID, serviceModelInfo),
678 PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
679 new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
680 new PresetMSOCreateVnfALaCarteE2E(vnfRequestId, serviceInstanceId, vnfInstanceId, "ONAP", requestorID, serviceModelInfo),
681 new PresetMSOOrchestrationRequestGet(COMPLETE, vnfRequestId),
682 PRESET_MTN6_TO_ATT_AIC,
683 new PresetMSOCreateVfModuleALaCarteE2E(vfm0RequestId, vfm0InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm0, null),
684 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm0RequestId),
685 new PresetMSOCreateVfModuleALaCarteE2E(vg1RequestId, vg1InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, vgName, vg1, null),
686 new PresetMSOOrchestrationRequestGet(COMPLETE, vg1RequestId),
687 new PresetMSOCreateVfModuleALaCarteE2E(vfm1RequestId, vfm1InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm1, vgRelatedInstance),
688 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm1RequestId),
689 new PresetMSOCreateVfModuleALaCarteE2E(vfm12RequestId, vfm12InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm12, null),
690 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm12RequestId)
695 loadServicePopup(serviceModelInfo.modelVersionId);
696 fillALaCarteServicePopup(serviceInstanceName);
698 createVnf(vnfData, false, serviceInstanceName);
699 createVfModule(serviceData, serviceInstanceName, true, false);
700 serviceData.vfData = new VfData("vocg_1804_vf0..Vocg1804Vf..ocgmgr..module-1", true, 0, NO_MAX_INSTANCES_IN_MODEL, emptyList(), "9c219e70-1177-494b-8977-1395c9f9168c", vgName);
701 createVfModule(serviceData, serviceInstanceName, false, false);
702 serviceData.vfData = new VfData("vocg_1804_vf0..Vocg1804Vf..ocgapp_001..module-12", true, 0, NO_MAX_INSTANCES_IN_MODEL, emptyList(), "b601eef4-62fd-4201-a788-ae30e06a1aec", null);
703 createVfModule(serviceData, serviceInstanceName, false, false);
704 drawingBoardPage.deploy();
705 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "service "+serviceInstanceName);
709 @FeatureTogglingTest(FLAG_5G_IN_NEW_INSTANTIATION_UI)
710 public void createNewServiceInstance_aLaCarte_withNetwork_validPopupDataAndUI() {
711 String serviceInstanceName = "NcService"+randomAlphabetic(5);
712 String networkInstanceName= "NcNetowrk"+randomAlphabetic(5);
713 String defactoNetworkInstanceName = "ExtVL"+networkInstanceName;
715 prepareServicePreset(aLaCarteNetworkProvider5G, true);
716 String serviceRequestId = uuid();
717 String networkRequestId = uuid();
718 String requestorID = getUserCredentials().getUserId();
719 registerExpectationFromPresets(
721 new PresetMSOCreateServiceInstanceAlacarte(
722 ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
723 serviceRequestId, DEFAULT_SERVICE_INSTANCE_ID,
724 requestorID, aLaCarteNetworkProvider5G),
725 new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
726 PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
727 new PresetMSOCreateNetworkALaCarte5G(networkRequestId, DEFAULT_SERVICE_INSTANCE_ID, defactoNetworkInstanceName, requestorID),
728 new PresetMSOOrchestrationRequestGet(COMPLETE, networkRequestId),
729 new PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork(
730 new ResponseDetails(serviceInstanceName, serviceRequestId, COMPLETE, "service"),
731 new ResponseDetails(defactoNetworkInstanceName, networkRequestId, COMPLETE, "network"),
732 DEFAULT_SERVICE_INSTANCE_ID)
736 loadServicePopup(aLaCarteNetworkProvider5G.modelVersionId);
737 fillALaCarteServicePopup(serviceInstanceName);
738 VnfData networkData = new VnfData("SR-IOV Provider-1", "840ffc47-e4cf-46de-8e23-525fd8c6fdc3", defactoNetworkInstanceName, false);
739 createNetwork(networkData, false, false, serviceInstanceName);
741 drawingBoardPage.deploy();
742 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "service "+serviceInstanceName);
745 private void fillALaCarteServicePopup(String serviceInstanceName) {
746 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
747 WebElement instanceNameInput = Get.byId("instanceName");
748 instanceNameInput.sendKeys(serviceInstanceName);
749 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
750 String serviceType = "TYLER SILVIA";
751 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
752 browseASDCPage.selectServiceTypeByName(serviceType);
753 SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
754 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
755 Click.byTestId("form-set");
756 VidBasePage.goOutFromIframe();
757 browseASDCPage.goToIframe();
761 public void createNewServiceInstance_macro_validPopupDataAndUI() {
763 List<String> serviceDynamicFields = Arrays.asList("2017488 pasqualevpe0 asn:");
764 ServiceData serviceData = new ServiceData(
765 macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails.modelVersionId,
766 serviceDynamicFields,
767 IS_GENERATED_NAMING.TRUE, true, true, false,
768 "2017-488_PASQUALE-vPE 0",
769 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
770 NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(),
771 "25284168-24bb-4698-8cb4-3f509146eca5", false);
773 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
775 final String serviceInstanceName = createMacroService(serviceData, true);
776 createVnf(serviceData, true, serviceInstanceName);
777 clickRemoveVfModule(vfModule0UUID, vfModule0Name);
778 createVfModule(serviceData, serviceInstanceName, false, false);
782 //@Step("deploy and verify module in pending table")
783 private void deployAndVerifyModuleInPendingTableMacro(String serviceInstanceName, String requestId1, String requestId2) {
784 drawingBoardPage.deploy();
786 boolean simulatorUpdated = false;
788 int[] ids = {0, 0, 1, 2};
789 String[] statuses = {IN_PROGRESS, COMPLETED, IN_PROGRESS, PENDING};
790 for (int i = 0; i < ids.length; i++) {
791 String actualInstanceName = getActualInstanceName(serviceInstanceName, ids[i]);
792 verifyModuleInPendingTable(actualInstanceName, requestId1, requestId2, ImmutableSet.of(statuses[i]), true, simulatorUpdated);
793 simulatorUpdated = true;
795 vidBasePage.screenshotDeployDialog(serviceInstanceName);
798 private void verifyModuleInPendingTable(String serviceInstanceName, String requestId1, String requestId2, Set<String> expectedStatuses, boolean isMacro, boolean simulatorUpdated) {
799 DrawingBoardPage.ServiceStatusChecker serviceStatusChecker = new DrawingBoardPage.ServiceStatusChecker(serviceInstanceName, expectedStatuses);
800 boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2);
801 final String assertionMessage = String.format("service %s: none of rowClasses [%s] is in expectedStatuses: [%s] ",
803 String.join(",", serviceStatusChecker.getColumnClassesSet()),
804 String.join(",", expectedStatuses));
806 assertTrue(assertionMessage, statusIsShown);
809 InstantiationStatusPage.assertInstantiationStatusRow(
810 serviceInstanceName, expectedRowFields(serviceInstanceName));
812 InstantiationStatusPage.assertInstantiationStatusRow(
813 serviceInstanceName, expectedALaCarteRowFields(serviceInstanceName));
816 if (!simulatorUpdated) {
817 if (requestId2 != null) {
818 registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet(IN_PROGRESS, requestId2), APPEND);
820 registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("COMPLETE", requestId1), APPEND);
822 vidBasePage.screenshotDeployDialog(serviceInstanceName);
825 private String getActualInstanceName(String serviceInstanceName, Integer i) {
826 return i==0 ? serviceInstanceName : serviceInstanceName + "_00" + i;
829 //@Step("verify open view edit")
830 private void verifyOpenViewEdit(String serviceInstanceName) {
831 boolean[] openEnabled = {true, false, false};
832 ImmutableList.of(0, 1, 2).forEach(i -> {
833 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
834 if (Features.FLAG_1902_NEW_VIEW_EDIT.isActive() || FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT.isActive()) {
835 InstantiationStatusPage.verifyOpenNewViewEdit(actualInstanceName, openEnabled[i], "EDIT");
838 vidBasePage.verifyOpenOldViewEdit(actualInstanceName, null, openEnabled[i], true, true);
843 //@Step("verify open audit info")
844 private void verifyOpenAuditInfo(String serviceInstanceName) {
845 boolean auditInfoEnabled = true;
846 String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
847 for (Integer i : ImmutableList.of(0, 1, 2)) {
848 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
849 InstantiationStatusPage.checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM, auditInfoEnabled, contextMenuOpen -> {
850 Click.byTestId(contextMenuOpen);
851 checkAuditInfoModal(actualInstanceName, i, statuses);
853 final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName);
854 row.findElement(By.id(Constants.InstantiationStatus.TD_JOB_STATUS_ICON + "-" + (i))).click();
855 checkAuditInfoModal(actualInstanceName, i, statuses);
859 private void checkAuditInfoModal(String actualInstanceName, Integer i, String[] statuses) {
861 Wait.waitByTestId("vidJobStatus", 10);
863 WebElement webElement = Get.byTestId("model-item-value-serviceInstanceName");
864 assertEquals(webElement.getText(), actualInstanceName, "Service Instance Name must be equal");
866 WebElement vidTableElement = Get.byId("service-instantiation-audit-info-vid");
867 assertEquals(3, vidTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "VID table must contain 3 columns");
869 List<WebElement> vidStatusesElements = vidTableElement.findElements(By.id("vidJobStatus"));
870 List<String> vidStatuses = vidStatusesElements.stream()
872 convertUITextCapitalizeAndFormatPipe(s.getText()))
873 .collect(Collectors.toList());
875 List<String> serviceStatus = Arrays.asList(Arrays.copyOfRange(statuses, i, statuses.length));
876 assertThat("statuses for " + actualInstanceName + " must be as expected", vidStatuses, containsInAnyOrder(serviceStatus.toArray()));
877 String dateString = vidTableElement.findElements(By.id("vidStatusTime")).get(0).getText();
878 assertTrue("vid Status Time column must contains valid date in format : MMM dd, yyyy HH:mm", isDateValid(dateString, "MMM dd, yyyy HH:mm"));
880 WebElement MSOTableElement = Get.byId("service-instantiation-audit-info-mso");
881 assertEquals(3, MSOTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "MSO table must contain 3 columns");
883 if (statuses[i].equals(PENDING)) {
884 assertEquals(0, MSOTableElement.findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(), "When status is PENDING MSO table is empty");
887 vidBasePage.screenshotDeployDialog("audit-info-" + actualInstanceName);
888 Click.byId(Constants.AuditInfoModal.CANCEL_BUTTON);
891 private String convertUITextCapitalizeAndFormatPipe(String text) {
892 return text.toUpperCase().replace("-", "_");
895 private boolean isDateValid(String dateToValidate, String dateFromat) {
897 if (dateToValidate == null) {
900 SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
901 sdf.setLenient(false);
903 //if not valid, it will throw ParseException
904 Date date = sdf.parse(dateToValidate);
906 } catch (ParseException e) {
913 //@Step("verifyDeleteJob")
914 private void verifyDeleteJob(String serviceInstanceName) {
915 boolean[] deleteEnabled = {false, false, true};
916 String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
917 verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE, statuses, deleteEnabled, "deleted");
920 //@Step("verify hide job")
921 private void verifyHideJob(String serviceInstanceName) {
922 boolean[] hideEnabled = {true, false};
923 String[] statuses = {COMPLETED, IN_PROGRESS};
924 verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HIDE, statuses, hideEnabled, "hidden");
927 private void verifyDeleteOrHideOperation(String serviceInstanceName, String contextMenuItem, String[] statuses, boolean[] operationEnabled, String operationName) {
928 for (int i = 0; i < statuses.length; i++) {
929 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
930 InstantiationStatusPage.checkMenuItem(actualInstanceName, contextMenuItem, operationEnabled[i], contextMenuDelete -> {
931 Click.byTestId(contextMenuDelete);
932 GeneralUIUtils.ultimateWait();
933 assertNull(actualInstanceName + " should be " + operationName,
934 InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName));
937 vidBasePage.screenshotDeployDialog(serviceInstanceName);
940 private ImmutableMap<String, String> expectedRowFields(String actualInstanceName) {
941 return ImmutableMap.<String, String>builder()
942 .put("userId", getUserCredentials().getUserId())
943 .put("serviceModelName", "action-data")
944 .put("serviceInstanceName", actualInstanceName)
945 .put("serviceModelVersion", "1.0")
946 .put("subscriberName", "SILVIA ROBBINS")
947 .put("serviceType", "TYLER SILVIA")
948 .put("regionId", "hvf6")
949 .put("tenantName", "AIN Web Tool-15-D-testalexandria")
950 .put("aicZoneName", "NFTJSSSS-NFT1")
951 .put("project", "WATKINS")
952 .put("owningEntityName", "WayneHolland")
953 .put("pause", "false")
957 private ImmutableMap<String, String> expectedALaCarteRowFields(String actualInstanceName) {
958 return ImmutableMap.<String, String>builder()
959 .put("userId", getUserCredentials().getUserId())
960 .put("serviceModelName", "Grouping Service for Test")
961 .put("serviceInstanceName", actualInstanceName)
962 .put("serviceModelVersion", "1.0")
963 .put("subscriberName", "SILVIA ROBBINS")
964 .put("serviceType", "TYLER SILVIA")
965 .put("project", "WATKINS")
966 .put("owningEntityName", "WayneHolland")
967 .put("pause", "false")
971 //@Step("create sriov service")
972 private String createMacroService(ServiceData serviceData, boolean tryCancelsAndReentries) {
973 return createMacroService(serviceData, tryCancelsAndReentries, randomAlphabetic(5), true, 3);
976 //@Step("create sriov service")
977 private String createMacroService(ServiceData serviceData, boolean tryCancelsAndReentries, String randomAlphabetic, boolean fillLcpRegionAndTenantAndZone, int bulkSize) {
978 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
979 User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
981 // simulate typing with spaces, but expected is without spaces
982 String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
983 String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
985 List<String> cycles = tryCancelsAndReentries ? ImmutableList.of("WILL_CANCEL", "AFTER_CANCEL") : ImmutableList.of("SINGLE_SHOT");
986 cycles.forEach(cycle -> {
987 if ("AFTER_CANCEL".equals(cycle)) {
988 loadServicePopupOnBrowseASDCPage(serviceData.modelUuid);
990 loadServicePopup(serviceData.modelUuid);
993 WebElement instanceName = Get.byId("instanceName");
994 boolean isRequired = isElementByIdRequired("instanceName-label");
995 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
996 Assert.assertNotNull(instanceName, "instance name input should be visible when serviceEcompNaming == true.");
997 Assert.assertFalse(isRequired,"instance name input should be optional when ecompNaming == true.");
999 Assert.assertTrue(isRequired,"instance name input should be required when serviceEcompNaming == false.");
1002 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.FALSE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1003 instanceName.sendKeys(serviceInstanceName);
1005 String setButtonTestId = "form-set";
1007 //serviceType should be dependent on subscriber selection
1008 assertElementDisabled("serviceType-select");
1009 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
1010 GeneralUIUtils.ultimateWait();
1011 Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
1012 if (Features.FLAG_RESTRICTED_SELECT.isActive())
1013 assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
1015 assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
1018 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
1019 //lcpRegion should be dependent on serviceType selection
1020 assertElementDisabled("lcpRegion-select");
1022 String serviceType = "TYLER SILVIA";
1023 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
1024 browseASDCPage.selectServiceTypeByName(serviceType);
1026 String owningEntity = "WayneHolland";
1027 GeneralUIUtils.ultimateWait();
1028 Wait.waitByClassAndText(Constants.CreateNewInstance.OWNING_ENTITY_OPTION, owningEntity, 30);
1029 SelectOption.byTestIdAndVisibleText(owningEntity, (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
1030 assertSetButtonDisabled(setButtonTestId);
1032 SelectOption.byTestIdAndVisibleText("ERICA", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
1033 browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89");
1035 if (fillLcpRegionAndTenantAndZone) {
1037 //we assume that if fillLcpRegionAndTenantAndZone is true tenant and lcpRegion are required for this service model
1038 //If you want to fill lcpRegionAndTenant where they are optional you can refactor this test...
1039 assertSetButtonDisabled(setButtonTestId);
1041 //tenant should be dependent on lcpRegion selection
1042 assertElementDisabled("tenant-select");
1044 String lcpRegion = "hvf6";
1045 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1046 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1048 GeneralUIUtils.ultimateWait();
1049 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1051 browseASDCPage.selectAicZone("NFT1");
1054 assertSetButtonEnabled(setButtonTestId);
1057 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
1059 assertNotificationAreaVisibilityBehaviourAndSetBulkSize(bulkSize);
1062 assertPauseOnPausePointsVisibility(serviceData.multiStageDesign);
1064 validateDynamicFields(serviceData.dynamicFields);
1066 vidBasePage.screenshotDeployDialog("createMacroService-" + serviceInstanceName);
1068 if ("WILL_CANCEL".equals(cycle)) {
1069 Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID);
1071 Click.byTestId(setButtonTestId);
1074 VidBasePage.goOutFromIframe();
1076 browseASDCPage.goToIframe();
1079 return serviceInstanceName;
1082 private String createALaCarteService(ServiceData serviceData, String randomAlphabetic) {
1083 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1084 User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
1086 // simulate typing with spaces, but expected is without spaces
1087 String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
1088 String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
1090 loadServicePopup(serviceData.modelUuid);
1092 WebElement instanceName = Get.byId("instanceName");
1093 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1094 Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true.");
1096 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.FALSE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1097 instanceName.sendKeys(serviceInstanceName);
1100 //serviceType should be dependent on subscriber selection
1101 assertElementDisabled("serviceType-select");
1102 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
1103 GeneralUIUtils.ultimateWait();
1104 Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
1105 if (Features.FLAG_RESTRICTED_SELECT.isActive())
1106 assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
1108 assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
1111 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
1113 String serviceType = "TYLER SILVIA";
1114 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
1115 browseASDCPage.selectServiceTypeByName(serviceType);
1117 String setButtonTestId = "form-set";
1118 assertSetButtonDisabled(setButtonTestId);
1120 SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
1122 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
1124 validateDynamicFields(serviceData.dynamicFields);
1126 vidBasePage.screenshotDeployDialog("createALaCarteService-" + serviceInstanceName);
1128 Click.byTestId(setButtonTestId);
1130 VidBasePage.goOutFromIframe();
1132 browseASDCPage.goToIframe();
1134 return serviceInstanceName;
1137 private void assertElementExistAccordingTagNameAndTestId(String tag, String testId) {
1138 WebElement webElement = Get.byId(testId);
1139 Assert.assertEquals(webElement.getTagName(), tag);
1142 //@Step("create vnf")
1143 private void createVnf(ServiceData serviceData, boolean tryCancelsAndReentries, String serviceInstanceName) {
1144 createVnf(serviceData.vnfData, tryCancelsAndReentries, serviceInstanceName);
1147 private void createNetwork(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName) {
1148 createVnf(vnfData, tryCancelsAndReentries, addedByDefault, serviceInstanceName, true);
1151 private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, String serviceInstanceName) {
1152 createVnf(vnfData, tryCancelsAndReentries, true, serviceInstanceName, false);
1155 private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName, boolean isNetwork) {
1156 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1158 String nodeToEdit = extractNodeToEdit(vnfData);
1159 if (addedByDefault) {
1160 hoverAndClickEditButton(nodeToEdit);
1162 drawingBoardPage.clickAddButtonByNodeName(vnfData.vnfName);
1165 GeneralUIUtils.ultimateWait();
1167 if (vnfData.isGeneratedNaming) {
1168 Assert.assertFalse(isElementByIdRequired("instanceName-label") ,"instance name input should be optional when EcompNaming == true, and required when false.");
1170 Input.text(vnfData.vnfInstanceName, "instanceName");
1174 //tenant should be dependent on lcpRegion selection
1175 assertElementDisabled("tenant-select");
1177 WebElement legacyRegion = Get.byTestId("lcpRegionText");
1178 Assert.assertNull(legacyRegion, "legacy region shouldn't be visible when lcp region isn't AAIAIC25,olson3 or olson5a.");
1180 browseASDCPage.selectLcpRegion("AAIAIC25");
1182 legacyRegion = Get.byTestId("lcpRegionText");
1183 Assert.assertNotNull(legacyRegion, "legacy region should be visible when lcp region is AAIAIC25,olson3 or olson5a.");
1185 browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e86");
1187 assertSetButtonDisabled(VNF_SET_BUTTON_TEST_ID);
1190 browseASDCPage.selectPlatform("platform");
1192 SelectOption.selectOptionsFromMultiselectById("multi-selectPlatform", ImmutableList.of("platform"));
1195 browseASDCPage.selectLineOfBusiness("ONAP");
1196 assertSetButtonEnabled(VNF_SET_BUTTON_TEST_ID);
1198 browseASDCPage.setLegacyRegion("some legacy region");
1201 Wait.waitByTestId("model-item-value-subscriberName", 10);
1202 Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1203 if (!vnfData.isGeneratedNaming) {
1204 Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Subscriber name should be shown in vf module");
1207 vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName);
1208 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
1212 if (tryCancelsAndReentries) {
1213 hoverAndClickEditButton(nodeToEdit);
1215 Wait.byText("TYLER SILVIA");
1216 GeneralUIUtils.ultimateWait();
1217 assertThat(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), startsWith("AAIAIC25"));
1218 Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.TENANT_SELECT_TESTS_ID), "USP-SIP-IC-24335-T-01");
1219 Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID), "ONAP");
1221 Assert.assertTrue(Get.isOptionSelectedInMultiSelect(Constants.OwningEntity.PLATFORM_MULTI_SELECT_TEST_ID, "platform"));
1223 clickToCloseModal(Constants.CANCEL_BUTTON_TEST_ID);
1225 toggleItemInTree(Constants.DrawingBoard.AVAILABLE_MODELS_TREE);
1227 Click.byTestId("node-" + nodeToEdit);
1230 private String extractNodeToEdit(VnfData vnfData) {
1231 return vnfData.vnfUuid + "-" + vnfData.vnfName;
1235 private void toggleItemInTree(String tree) {
1236 Click.byXpath("//tree-root[@data-tests-id='" + tree + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']");
1239 private void hoverAndClickEditButton(String nodeToEdit) {
1240 hoverAndClickButton(nodeToEdit, Constants.DrawingBoard.CONTEXT_MENU_EDIT);
1243 private void hoverAndClickDeleteButton(String nodeToEdit) {
1244 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE);
1247 private void hoverAndClickDuplicateButton(String nodeToEdit) {
1248 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_DUPLICATE);
1250 private void hoverAndClickButton(String nodeToEdit, String contextMenuItem) {
1251 String nodeOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit;
1252 String buttonOfEdit = nodeOfEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON;
1253 GeneralUIUtils.hoverOnAreaByTestId(buttonOfEdit);
1254 Click.byTestId(buttonOfEdit);
1255 Click.byTestId(contextMenuItem);
1258 private void uploadSupplementaryFile(String inputFileName, boolean isValid, BrowseASDCPage browseASDCPage, String setButtonTestId) {
1259 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1260 GeneralUIUtils.ultimateWait();
1261 Input.file("supplementaryFiles/" + inputFileName, "supplementaryFile");
1262 GeneralUIUtils.ultimateWait();
1263 WebElement fileName = Get.byTestId("file-name");
1264 Assert.assertEquals(fileName.getText(),inputFileName);
1265 browseASDCPage.assertButtonState(setButtonTestId, isValid);
1269 private void deleteSupplementaryFile() {
1270 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1271 Click.byTestId("remove-uploaded-file");
1272 GeneralUIUtils.ultimateWait();
1273 WebElement fileName = Get.byTestId("file-name");
1274 Assert.assertEquals(fileName.getText(),"Choose file");
1278 //@Step("create vf module")
1279 private void createVfModule(ServiceData serviceData, String serviceInstanceName, boolean addedByDefault, boolean addOpensPopup) {
1280 clickAddVfModule(serviceData, addedByDefault);
1281 if (!addOpensPopup) {
1282 clickEditVfModule(serviceData);
1284 fillAndSetVfModulePopup(serviceData, serviceInstanceName);
1287 private void fillAndSetVfModulePopup(ServiceData serviceData, String serviceInstanceName) {
1288 String setButtonTestId = "form-set";
1289 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1291 Assert.assertEquals(isElementByIdRequired("instanceName-label"), !serviceData.vnfData.isGeneratedNaming,"instance name input should be optional when EcompNaming == true, and required when false.");
1293 if (!serviceData.vnfData.isGeneratedNaming) {
1294 Input.text("VF instance name", "instanceName");
1297 if (!serviceData.vfData.vgEnabled || (!serviceData.isALaCarte && serviceData.vnfData.isGeneratedNaming)) {
1298 Assert.assertNull(Get.byTestId("volumeGroupName"), "volumeGroupName input should be invisible "
1299 + "when vgEnabled is false or when vgEnabled is true and EcompGenName is true "
1300 + "(was: serviceData.vfData.vgEnabled=>" + serviceData.vfData.vgEnabled + ", serviceData.isGeneratedNaming=>" + IS_GENERATED_NAMING.FALSE + ")");
1303 Assert.assertFalse(isElementByIdRequired("volumeGroupName-label"),
1304 "volume Group name input should be always optional");
1305 if (serviceData.vfData.vgName!=null) {
1306 browseASDCPage.setInputText("volumeGroupName", serviceData.vfData.vgName);
1311 Wait.waitByTestId("model-item-value-subscriberName", 10);
1312 Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1313 Assert.assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(serviceData.vfData.vfMin), "Min should be shown");
1314 if (serviceData.vfData.vfMax!=null) {
1315 if (!serviceData.vfData.vfMax.equals(NO_MAX_INSTANCES_IN_MODEL)) {
1316 Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), serviceData.vfData.vfMax, "Max should be shown");
1319 String defaultMaxText = Features.FLAG_2002_UNLIMITED_MAX.isActive() ? "Unlimited (default)" : "1";
1320 Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), defaultMaxText, "Max should be shown with default value");
1324 if (serviceData.isGeneratedNaming!=IS_GENERATED_NAMING.TRUE) {
1325 Wait.byText(serviceInstanceName);
1326 Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Service name should be shown in vf module");
1329 if (serviceData.isALaCarte) {
1330 String lcpRegion = "hvf6";
1331 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1332 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1333 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1336 validateDynamicFields(serviceData.vfData.dynamicFields);
1338 uploadSupplementaryFile("invalid-file.json", false, browseASDCPage, setButtonTestId);
1339 deleteSupplementaryFile();
1340 uploadSupplementaryFile("sample.json", true, browseASDCPage, setButtonTestId);
1342 browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName);
1343 clickToCloseModal(setButtonTestId);
1346 private void clickToCloseModal(String setOrCancelButtonTestId) {
1347 Click.byTestId(setOrCancelButtonTestId);
1348 GeneralUIUtils.ultimateWait();
1351 private void clickEditVfModule(ServiceData serviceData) {
1352 hoverAndClickEditButton(serviceData.vfData.uuid + "-" + serviceData.vfData.vfName);
1355 private void clickAddVfModule(ServiceData serviceData, boolean addedByDefault) {
1356 if (addedByDefault) {
1359 System.out.println("VFModule should be added 'manually'");
1361 final WebElement vfModuleNode = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + serviceData.vfData.vfName);
1363 if (vfModuleNode == null || !vfModuleNode.isDisplayed()) {
1365 drawingBoardPage.clickNode(serviceData.vnfData.vnfName);
1367 drawingBoardPage.clickAddButtonByNodeName(serviceData.vfData.vfName);
1370 private void clickRemoveVfModule(String vfModuleId, String vfModuleName) {
1371 System.out.println("will remove " + vfModule0Name);
1372 hoverAndClickDeleteButton(vfModuleId + "-" + vfModuleName);
1375 private void assertPauseOnPausePointsVisibility(boolean visibility) {
1376 WebElement pauseElem = Get.byId("Pause");
1377 final String assertionMessage = "pause on pause points visibility should be " + visibility;
1379 Assert.assertNotNull(pauseElem, assertionMessage);
1381 Assert.assertNull(pauseElem, assertionMessage);
1385 public void validateDynamicFields(List<String> dynamicFields) {
1386 for (String field : dynamicFields) {
1387 WebElement fieldElement = GeneralUIUtils.findByText(field);
1388 assertNotNull("couldn't find dynamic field: " + field, fieldElement);
1392 private void assertNotificationAreaVisibilityBehaviourAndSetBulkSize(int size) {
1393 WebElement webElement = Get.byId("notification-area");
1394 Assert.assertNull(webElement, "notification area should be invisible if only 1 qty.");
1396 SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(size));
1398 webElement = Get.byId("notification-area");
1399 Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty.");
1402 static class ServiceData {
1404 ServiceData(String modelUuid, List<String> dynamicFields, IS_GENERATED_NAMING isServiceGeneratedNaming,
1405 boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName,
1406 String vfName, int vfMin, String vfMax, List<String> vfModuleDynamicFields, String vfVersionId, boolean isALaCarte) {
1407 this.modelUuid = modelUuid;
1408 this.dynamicFields = dynamicFields;
1409 this.isGeneratedNaming = isServiceGeneratedNaming;
1410 this.multiStageDesign = multiStageDesign;
1411 this.isALaCarte = isALaCarte;
1412 this.vnfData = new VnfData(vnfName, "69e09f68-8b63-4cc9-b9ff-860960b5db09", "VNF instance name", isVnfGeneratedNaming);
1413 this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields, vfVersionId, "_abc");
1416 public ServiceData(IS_GENERATED_NAMING isGeneratedNaming, VnfData vnfData, VfData vfData, boolean isALaCarte) {
1417 this.isGeneratedNaming = isGeneratedNaming;
1418 this.vnfData = vnfData;
1419 this.vfData = vfData;
1420 this.isALaCarte = isALaCarte;
1424 List<String> dynamicFields;
1425 IS_GENERATED_NAMING isGeneratedNaming;
1426 boolean multiStageDesign;
1431 enum IS_GENERATED_NAMING { TRUE, FALSE, TRUE_BUT_GIVE_NAME_EITHER_WAY}
1434 private static class VnfData {
1435 VnfData(String vnfName, String vnfUuid, String vnfInstanceName, boolean isGeneratedNaming) {
1436 this.vnfName = vnfName;
1437 this.vnfUuid = vnfUuid;
1438 this.vnfInstanceName = vnfInstanceName;
1439 this.isGeneratedNaming = isGeneratedNaming;
1442 final String vnfName;
1443 final String vnfUuid;
1444 final String vnfInstanceName;
1445 final boolean isGeneratedNaming;
1449 private static class VfData {
1450 VfData(String vfName, boolean vgEnabled, int vfMin, String vfMax, List<String> dynamicFields, String uuid, String vgName) {
1451 this.vfName = vfName;
1452 this.vgEnabled = vgEnabled;
1455 this.dynamicFields = dynamicFields;
1457 this.vgName = vgName;
1463 final String vfName;
1464 final boolean vgEnabled;
1465 final List<String> dynamicFields;
1466 final String vgName;