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");
1188 assertSetButtonDisabled(VNF_SET_BUTTON_TEST_ID);
1191 browseASDCPage.selectPlatform("platform");
1193 SelectOption.selectOptionsFromMultiselectById("multi-selectPlatform", ImmutableList.of("platform"));
1194 SelectOption.byTestIdAndVisibleText("TYLER SILVIA", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
1195 browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89");
1198 browseASDCPage.selectLineOfBusiness("ONAP");
1199 assertSetButtonEnabled(VNF_SET_BUTTON_TEST_ID);
1201 browseASDCPage.setLegacyRegion("some legacy region");
1204 Wait.waitByTestId("model-item-value-subscriberName", 10);
1205 Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1206 if (!vnfData.isGeneratedNaming) {
1207 Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Subscriber name should be shown in vf module");
1210 vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName);
1211 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
1215 if (tryCancelsAndReentries) {
1216 hoverAndClickEditButton(nodeToEdit);
1218 Wait.byText("TYLER SILVIA");
1219 GeneralUIUtils.ultimateWait();
1220 assertThat(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), startsWith("AAIAIC25"));
1221 Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.TENANT_SELECT_TESTS_ID), "USP-SIP-IC-24335-T-01");
1222 Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID), "ONAP");
1224 Assert.assertTrue(Get.isOptionSelectedInMultiSelect(Constants.OwningEntity.PLATFORM_MULTI_SELECT_TEST_ID, "platform"));
1226 clickToCloseModal(Constants.CANCEL_BUTTON_TEST_ID);
1228 toggleItemInTree(Constants.DrawingBoard.AVAILABLE_MODELS_TREE);
1230 Click.byTestId("node-" + nodeToEdit);
1233 private String extractNodeToEdit(VnfData vnfData) {
1234 return vnfData.vnfUuid + "-" + vnfData.vnfName;
1238 private void toggleItemInTree(String tree) {
1239 Click.byXpath("//tree-root[@data-tests-id='" + tree + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']");
1242 private void hoverAndClickEditButton(String nodeToEdit) {
1243 hoverAndClickButton(nodeToEdit, Constants.DrawingBoard.CONTEXT_MENU_EDIT);
1246 private void hoverAndClickDeleteButton(String nodeToEdit) {
1247 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE);
1250 private void hoverAndClickDuplicateButton(String nodeToEdit) {
1251 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_DUPLICATE);
1253 private void hoverAndClickButton(String nodeToEdit, String contextMenuItem) {
1254 String nodeOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit;
1255 String buttonOfEdit = nodeOfEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON;
1256 GeneralUIUtils.hoverOnAreaByTestId(buttonOfEdit);
1257 Click.byTestId(buttonOfEdit);
1258 Click.byTestId(contextMenuItem);
1261 private void uploadSupplementaryFile(String inputFileName, boolean isValid, BrowseASDCPage browseASDCPage, String setButtonTestId) {
1262 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1263 GeneralUIUtils.ultimateWait();
1264 Input.file("supplementaryFiles/" + inputFileName, "supplementaryFile");
1265 GeneralUIUtils.ultimateWait();
1266 WebElement fileName = Get.byTestId("file-name");
1267 Assert.assertEquals(fileName.getText(),inputFileName);
1268 browseASDCPage.assertButtonState(setButtonTestId, isValid);
1272 private void deleteSupplementaryFile() {
1273 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1274 Click.byTestId("remove-uploaded-file");
1275 GeneralUIUtils.ultimateWait();
1276 WebElement fileName = Get.byTestId("file-name");
1277 Assert.assertEquals(fileName.getText(),"Choose file");
1281 //@Step("create vf module")
1282 private void createVfModule(ServiceData serviceData, String serviceInstanceName, boolean addedByDefault, boolean addOpensPopup) {
1283 clickAddVfModule(serviceData, addedByDefault);
1284 if (!addOpensPopup) {
1285 clickEditVfModule(serviceData);
1287 fillAndSetVfModulePopup(serviceData, serviceInstanceName);
1290 private void fillAndSetVfModulePopup(ServiceData serviceData, String serviceInstanceName) {
1291 String setButtonTestId = "form-set";
1292 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1294 Assert.assertEquals(isElementByIdRequired("instanceName-label"), !serviceData.vnfData.isGeneratedNaming,"instance name input should be optional when EcompNaming == true, and required when false.");
1296 if (!serviceData.vnfData.isGeneratedNaming) {
1297 Input.text("VF instance name", "instanceName");
1300 if (!serviceData.vfData.vgEnabled || (!serviceData.isALaCarte && serviceData.vnfData.isGeneratedNaming)) {
1301 Assert.assertNull(Get.byTestId("volumeGroupName"), "volumeGroupName input should be invisible "
1302 + "when vgEnabled is false or when vgEnabled is true and EcompGenName is true "
1303 + "(was: serviceData.vfData.vgEnabled=>" + serviceData.vfData.vgEnabled + ", serviceData.isGeneratedNaming=>" + IS_GENERATED_NAMING.FALSE + ")");
1306 Assert.assertFalse(isElementByIdRequired("volumeGroupName-label"),
1307 "volume Group name input should be always optional");
1308 if (serviceData.vfData.vgName!=null) {
1309 browseASDCPage.setInputText("volumeGroupName", serviceData.vfData.vgName);
1314 Wait.waitByTestId("model-item-value-subscriberName", 10);
1315 Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1316 Assert.assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(serviceData.vfData.vfMin), "Min should be shown");
1317 if (serviceData.vfData.vfMax!=null) {
1318 if (!serviceData.vfData.vfMax.equals(NO_MAX_INSTANCES_IN_MODEL)) {
1319 Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), serviceData.vfData.vfMax, "Max should be shown");
1322 String defaultMaxText = Features.FLAG_2002_UNLIMITED_MAX.isActive() ? "Unlimited (default)" : "1";
1323 Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), defaultMaxText, "Max should be shown with default value");
1327 if (serviceData.isGeneratedNaming!=IS_GENERATED_NAMING.TRUE) {
1328 Wait.byText(serviceInstanceName);
1329 Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Service name should be shown in vf module");
1332 if (serviceData.isALaCarte) {
1333 String lcpRegion = "hvf6";
1334 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1335 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1336 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1339 validateDynamicFields(serviceData.vfData.dynamicFields);
1341 uploadSupplementaryFile("invalid-file.json", false, browseASDCPage, setButtonTestId);
1342 deleteSupplementaryFile();
1343 uploadSupplementaryFile("sample.json", true, browseASDCPage, setButtonTestId);
1345 browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName);
1346 clickToCloseModal(setButtonTestId);
1349 private void clickToCloseModal(String setOrCancelButtonTestId) {
1350 Click.byTestId(setOrCancelButtonTestId);
1351 GeneralUIUtils.ultimateWait();
1354 private void clickEditVfModule(ServiceData serviceData) {
1355 hoverAndClickEditButton(serviceData.vfData.uuid + "-" + serviceData.vfData.vfName);
1358 private void clickAddVfModule(ServiceData serviceData, boolean addedByDefault) {
1359 if (addedByDefault) {
1362 System.out.println("VFModule should be added 'manually'");
1364 final WebElement vfModuleNode = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + serviceData.vfData.vfName);
1366 if (vfModuleNode == null || !vfModuleNode.isDisplayed()) {
1368 drawingBoardPage.clickNode(serviceData.vnfData.vnfName);
1370 drawingBoardPage.clickAddButtonByNodeName(serviceData.vfData.vfName);
1373 private void clickRemoveVfModule(String vfModuleId, String vfModuleName) {
1374 System.out.println("will remove " + vfModule0Name);
1375 hoverAndClickDeleteButton(vfModuleId + "-" + vfModuleName);
1378 private void assertPauseOnPausePointsVisibility(boolean visibility) {
1379 WebElement pauseElem = Get.byId("Pause");
1380 final String assertionMessage = "pause on pause points visibility should be " + visibility;
1382 Assert.assertNotNull(pauseElem, assertionMessage);
1384 Assert.assertNull(pauseElem, assertionMessage);
1388 public void validateDynamicFields(List<String> dynamicFields) {
1389 for (String field : dynamicFields) {
1390 WebElement fieldElement = GeneralUIUtils.findByText(field);
1391 assertNotNull("couldn't find dynamic field: " + field, fieldElement);
1395 private void assertNotificationAreaVisibilityBehaviourAndSetBulkSize(int size) {
1396 WebElement webElement = Get.byId("notification-area");
1397 Assert.assertNull(webElement, "notification area should be invisible if only 1 qty.");
1399 SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(size));
1401 webElement = Get.byId("notification-area");
1402 Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty.");
1405 static class ServiceData {
1407 ServiceData(String modelUuid, List<String> dynamicFields, IS_GENERATED_NAMING isServiceGeneratedNaming,
1408 boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName,
1409 String vfName, int vfMin, String vfMax, List<String> vfModuleDynamicFields, String vfVersionId, boolean isALaCarte) {
1410 this.modelUuid = modelUuid;
1411 this.dynamicFields = dynamicFields;
1412 this.isGeneratedNaming = isServiceGeneratedNaming;
1413 this.multiStageDesign = multiStageDesign;
1414 this.isALaCarte = isALaCarte;
1415 this.vnfData = new VnfData(vnfName, "69e09f68-8b63-4cc9-b9ff-860960b5db09", "VNF instance name", isVnfGeneratedNaming);
1416 this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields, vfVersionId, "_abc");
1419 public ServiceData(IS_GENERATED_NAMING isGeneratedNaming, VnfData vnfData, VfData vfData, boolean isALaCarte) {
1420 this.isGeneratedNaming = isGeneratedNaming;
1421 this.vnfData = vnfData;
1422 this.vfData = vfData;
1423 this.isALaCarte = isALaCarte;
1427 List<String> dynamicFields;
1428 IS_GENERATED_NAMING isGeneratedNaming;
1429 boolean multiStageDesign;
1434 enum IS_GENERATED_NAMING { TRUE, FALSE, TRUE_BUT_GIVE_NAME_EITHER_WAY}
1437 private static class VnfData {
1438 VnfData(String vnfName, String vnfUuid, String vnfInstanceName, boolean isGeneratedNaming) {
1439 this.vnfName = vnfName;
1440 this.vnfUuid = vnfUuid;
1441 this.vnfInstanceName = vnfInstanceName;
1442 this.isGeneratedNaming = isGeneratedNaming;
1445 final String vnfName;
1446 final String vnfUuid;
1447 final String vnfInstanceName;
1448 final boolean isGeneratedNaming;
1452 private static class VfData {
1453 VfData(String vfName, boolean vgEnabled, int vfMin, String vfMax, List<String> dynamicFields, String uuid, String vgName) {
1454 this.vfName = vfName;
1455 this.vgEnabled = vgEnabled;
1458 this.dynamicFields = dynamicFields;
1460 this.vgName = vgName;
1466 final String vfName;
1467 final boolean vgEnabled;
1468 final List<String> dynamicFields;
1469 final String vgName;