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.assertTrue;
15 import static vid.automation.test.infra.Features.FLAG_1902_VNF_GROUPING;
16 import static vid.automation.test.infra.Features.FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI;
17 import static vid.automation.test.infra.Features.FLAG_1908_INFRASTRUCTURE_VPN;
18 import static vid.automation.test.infra.Features.FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT;
19 import static vid.automation.test.infra.Features.FLAG_1908_TRANSPORT_SERVICE_NEW_INSTANTIATION_UI;
20 import static vid.automation.test.infra.Features.FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI;
21 import static vid.automation.test.infra.Features.FLAG_5G_IN_NEW_INSTANTIATION_UI;
22 import static vid.automation.test.infra.Features.FLAG_ENABLE_WEBPACK_MODERN_UI;
23 import static vid.automation.test.infra.ModelInfo.aLaCarteNetworkProvider5G;
24 import static vid.automation.test.infra.ModelInfo.aLaCarteVnfGroupingService;
25 import static vid.automation.test.infra.ModelInfo.collectionResourceService;
26 import static vid.automation.test.infra.ModelInfo.infrastructureVpnService;
27 import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails;
28 import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse;
29 import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse;
30 import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails;
31 import static vid.automation.test.infra.ModelInfo.pasqualeVmxVpeBvService488Annotations;
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.UUID;
52 import java.util.stream.Collectors;
53 import org.apache.commons.lang3.mutable.MutableInt;
54 import org.apache.logging.log4j.LogManager;
55 import org.apache.logging.log4j.Logger;
56 import org.hamcrest.Matchers;
57 import org.jetbrains.annotations.NotNull;
58 import org.onap.sdc.ci.tests.datatypes.UserCredentials;
59 import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
60 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetL3NetworksByCloudRegionSpecificState;
61 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetTenants;
62 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetVpnsByType;
63 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIPostNamedQueryForViewEdit;
64 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
65 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarte5G;
66 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceAlacarte;
67 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService;
68 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse;
69 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteE2E;
70 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteE2E;
71 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
72 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork;
73 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork.ResponseDetails;
74 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
75 import org.onap.simulator.presetGenerator.presets.mso.PresetMsoCreateMacroCommonPre1806;
76 import org.openqa.selenium.By;
77 import org.openqa.selenium.WebElement;
78 import org.openqa.selenium.remote.RemoteWebElement;
79 import org.testng.Assert;
80 import org.testng.annotations.AfterClass;
81 import org.testng.annotations.BeforeClass;
82 import org.testng.annotations.BeforeMethod;
83 import org.testng.annotations.Test;
84 import vid.automation.test.Constants;
85 import vid.automation.test.Constants.BrowseASDC.NewServicePopup;
86 import vid.automation.test.infra.Click;
87 import vid.automation.test.infra.FeatureTogglingTest;
88 import vid.automation.test.infra.Features;
89 import vid.automation.test.infra.Get;
90 import vid.automation.test.infra.Input;
91 import vid.automation.test.infra.ModelInfo;
92 import vid.automation.test.infra.ModelInfoWithCustomization;
93 import vid.automation.test.infra.SelectOption;
94 import vid.automation.test.infra.Wait;
95 import vid.automation.test.model.Service;
96 import vid.automation.test.model.User;
97 import vid.automation.test.sections.BrowseASDCPage;
98 import vid.automation.test.sections.DrawingBoardPage;
99 import vid.automation.test.sections.InstantiationStatusPage;
100 import vid.automation.test.sections.SideMenu;
101 import vid.automation.test.sections.VidBasePage;
102 import vid.automation.test.services.AsyncJobsService;
103 import vid.automation.test.services.ServicesService;
104 import vid.automation.test.services.SimulatorApi;
105 import vid.automation.test.test.NewServiceInstanceTest.ServiceData.IS_GENERATED_NAMING;
106 import vid.automation.test.utils.ReadFile;
108 @FeatureTogglingTest(FLAG_ENABLE_WEBPACK_MODERN_UI)
109 public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
111 public static final String COMPLETED = "COMPLETED";
112 private static final String IN_PROGRESS = "IN_PROGRESS";
113 private static final String PENDING = "PENDING";
114 private final String vfModule0Name = "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0";
115 private final String vfModule0UUID = "f8360508-3f17-4414-a2ed-6bc71161e8db";
116 private ServicesService servicesService = new ServicesService();
117 private DrawingBoardPage drawingBoardPage = new DrawingBoardPage();
118 List<String> serviceModelLabelList = Arrays.asList("Model version", "Description", "Category", "UUID",
119 "Invariant UUID", "Service type", "Service role");
120 List<String> mandatoryServiceModelLabelList = Arrays.asList("Model version", "UUID", "Invariant UUID");
121 private final VidBasePage vidBasePage = new VidBasePage();
122 public static final String VNF_SET_BUTTON_TEST_ID = "form-set";
123 private static final Logger logger = LogManager.getLogger(NewServiceInstanceTest.class);
124 private static final String NO_MAX_INSTANCES_IN_MODEL = "NO_MAX_INSTANCES_IN_MODEL";
127 protected void dropAllAsyncJobs() {
128 AsyncJobsService asyncJobsService = new AsyncJobsService();
129 asyncJobsService.dropAllAsyncJobs();
133 protected void muteAllAsyncJobs() {
134 AsyncJobsService asyncJobsService = new AsyncJobsService();
135 asyncJobsService.muteAllAsyncJobs();
139 protected void goToWelcome() {
140 SideMenu.navigateToWelcomePage();
144 protected UserCredentials getUserCredentials() {
145 String userName = Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA;
146 User user = usersService.getUser(userName);
147 return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
151 public void createNewServiceInstance_fullModelData_LeftPaneLabelsCorrect() throws Exception {
152 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
153 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
154 assertServiceModelLabelsCorrect(serviceModelLabelList);
158 public void createNewServiceInstance_partialModelData_LeftPaneLabelsCorrect() throws Exception {
159 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
160 loadServicePopup(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails);
161 assertServiceModelLabelsCorrect(mandatoryServiceModelLabelList);
165 public void createNewServiceInstance_setFieldValue_resetDependenciesListsAndValues() {
166 resetGetTenantsCache();
168 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
169 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
170 SimulatorApi.registerExpectation(Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_CAR_2020_ER, SimulatorApi.RegistrationStrategy.APPEND);
171 registerExpectationFromPreset(
172 new PresetAAIGetTenants(
174 "MSO-dev-service-type",
175 "registration_to_simulator/create_new_instance/aai_get_tenants_for_customer_CAR_2020_ER.json"),
176 SimulatorApi.RegistrationStrategy.APPEND);
178 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
179 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
180 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
181 GeneralUIUtils.ultimateWait();
182 String serviceType = "TYLER SILVIA";
183 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
184 browseASDCPage.selectServiceTypeByName(serviceType);
185 String lcpRegion = "hvf6";
186 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
187 viewEditPage.selectLcpRegion(lcpRegion, AIC);
188 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
190 VidBasePage.selectSubscriberById("CAR_2020_ER");
191 assertElementDisabled("lcpRegion-select");
192 serviceType = "MSO-dev-service-type";
193 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
194 browseASDCPage.selectServiceTypeByName(serviceType);
195 lcpRegion = "CAR_2020_ER";
196 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
197 viewEditPage.selectLcpRegion(lcpRegion, AIC);
198 browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e66");
200 resetGetTenantsCache();
205 * asserts that the provided labels list is visible and that no other detail item appears in the model details panel.
207 protected void assertServiceModelLabelsCorrect(List<String> serviceModelLabelList) throws Exception {
208 WebElement genericPopup = getDriver().findElement(By.tagName("generic-form-popup"));
209 WebElement modelInformation = genericPopup.findElement(By.id("model-information"));
210 List<WebElement> modelInformationItems = modelInformation.findElements(By.xpath("./div"));
211 assertEquals(modelInformationItems.size(), serviceModelLabelList.size());
212 serviceModelLabelList.forEach(label -> {
213 WebElement webElement = Get.byTestId("model-item-" + label);
214 WebElement itemWarpper = webElement.findElements(By.className("wrapper")).get(0);
215 assertEquals(itemWarpper.findElements(By.tagName("label")).get(0).getText(), label, "model details item label is incorrect.");
220 public void createNewServiceInstance_leftPane_serviceModelDataCorrect() {
221 Service service = servicesService.getService(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId);
222 String prefix = NewServicePopup.SERVICE_MODEL_DATA_TEST_ID_VALUE_PREFIX;
223 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
224 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
225 logger.info("Expected service model properties: "+service.toString());
226 assertModelDataCorrect(NewServicePopup.SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID, prefix, service);
230 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingFalse() {
232 ServiceData serviceData = new ServiceData(
233 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
235 IS_GENERATED_NAMING.FALSE, true, true, true,
236 "2017-488_PASQUALE-vPE 0",
237 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
238 0, NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5", false);
240 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
242 final String serviceInstanceName = createMacroService(serviceData, true);
243 createVnf(serviceData, true, serviceInstanceName);
245 createVfModule(serviceData, serviceInstanceName, false, false);
249 @Test(groups = "underDevelopment")
250 public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_DEV() {
252 Upon failure in test dynamicFieldsEcompNamingFalse_FLESH(), exception will provide
253 the needed data for this DEV method:
255 1. "Current step" when the failure occurred
256 2. "Random alphabetic" that was randomized while test
257 3. "Starting reduxState" that was on the step that failed.
259 These data can be used for, accordingly, 1. startInStep param; 2, randomAlphabetic
260 param; 3. reduxForStep param.
263 // It should be easier to put `reduxForStep` in this file, to avoid Java's code-clutter and json escaping.
264 final String reduxForStep = ReadFile.loadResourceAsString(
265 "NewServiceInstanceTest/createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse.json");
267 createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("DEV", 5, reduxForStep, "mCaNk");
271 public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse() {
272 createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("RUNTIME", 0, null, randomAlphabetic(5));
275 private void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH(String mode, int startInStep, String reduxForStep, String randomAlphabetic) {
277 MutableInt i = new MutableInt();
278 Map<String, String> reduxStates = new HashMap<>();
280 ServiceData serviceData = new ServiceData(
281 macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse.modelVersionId,
282 Collections.singletonList("2017488 pasqualevpe0 asn:"),
283 IS_GENERATED_NAMING.FALSE, false, true, false,
284 "2017-488_PASQUALE-vPE 0",
285 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
286 NO_MAX_INSTANCES_IN_MODEL, ImmutableList.of("Bandwidth", "Bandwidth units"),
287 "25284168-24bb-4698-8cb4-3f509146eca5", false);
289 // this is the instance-name that createMacroService is going to use
290 String serviceInstanceName = randomAlphabetic + "instancename";
292 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
293 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
295 createMacroService(serviceData, false, randomAlphabetic, true, 3);
298 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
299 createVnf(serviceData, false, serviceInstanceName)
302 final String vnfInstanceName2 = randomAlphabetic + "instanceName";
303 final String vnfName2 = "2017-388_PASQUALE-vPE";
305 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
306 createVnf(new VnfData(vnfName2 + " 0", "afacccf6-397d-45d6-b5ae-94c39734b168", vnfInstanceName2, false),
307 false, serviceInstanceName)
310 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
311 createVfModule(serviceData, serviceInstanceName, false, true)
314 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
316 editVfModuleAndJustSetName(vfModule0Name, vfModule0UUID);
317 duplicateVnf(serviceData.vnfData, 2);
318 vidBasePage.screenshotDeployDialog(serviceInstanceName);
321 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
322 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
325 final String vfModuleName1 = "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0";
326 final String vfModuleName2 = "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1";
327 final String request1 = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
328 final String request2 = "ce010256-3fdd-4cb5-aed7-37112a2c6e93";
329 final ImmutableMap<Keys, String> vars = ImmutableMap.<Keys, String>builder()
330 .put(Keys.SERVICE_NAME, serviceInstanceName)
331 .put(Keys.VNF_NAME, cleanSeparators("2017-488_PASQUALE-vPE", serviceData.vnfData.vnfInstanceName))
332 .put(Keys.VFM_NAME1, cleanSeparators(vfModuleName1 , "VF instance name ZERO"))
333 .put(Keys.VFM_NAME2, cleanSeparators(vfModuleName2 , "VF instance name"))
334 .put(Keys.VG_NAME, cleanSeparators(vfModuleName2 , "VF instance name") + "_vol_abc")
335 .put(Keys.VNF_NAME2, cleanSeparators(vnfName2, vnfInstanceName2))
337 registerExpectationFromPresets(ImmutableList.of(
338 // although "some legacy region" is provided for vnf, Service's region "hvf6" overrides it
339 PRESET_MTN6_TO_ATT_AIC,
340 new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 0, request1),
341 new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 1, request2)
342 ), SimulatorApi.RegistrationStrategy.APPEND);
344 deployAndVerifyModuleInPendingTableMacro(serviceInstanceName, request1, request2);
345 verifyOpenAuditInfo(serviceInstanceName);
346 verifyOpenViewEdit(serviceInstanceName);
347 verifyDeleteJob(serviceInstanceName);
348 verifyHideJob(serviceInstanceName);
353 @FeatureTogglingTest(FLAG_1908_INFRASTRUCTURE_VPN)
354 public void createNewServiceInstance_infraStructureVpn() {
355 String requestId = uuid();
356 String instanceId = uuid();
358 prepareServicePreset(infrastructureVpnService, false);
360 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
361 PRESET_MTN6_TO_ATT_AIC,
362 new PresetAAIGetL3NetworksByCloudRegionSpecificState("irma-aic", "hvf6", "bae71557c5bb4d5aac6743a4e5f1d054"),
363 new PresetAAIGetVpnsByType()
366 ServiceData serviceData = new ServiceData(
367 infrastructureVpnService.modelVersionId,
369 IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY, true, true, false,
371 null, 0, null, new ArrayList<>(), null, false);
372 final String serviceInstanceName = createMacroService(serviceData, false);
374 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
375 PresetMsoCreateMacroCommonPre1806.ofServiceWithVRF(requestId, instanceId, serviceInstanceName),
376 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
379 // Wizard pages of Network and VPN
380 Click.byTestIdOnceItsAvailable("10a74149-c9d7-4918-bbcf-d5fb9b1799ce", 20);
381 clickToCloseModal("setMembersBtn");
383 Click.byTestIdOnceItsAvailable("120d39fb-3627-473d-913c-d228dd0f8e5b", 20);
384 clickToCloseModal("setMembersBtn");
386 Assert.assertEquals(Get.byTestId("node-type-indicator").getText(),"VRF");
388 drawingBoardPage.deploy();
389 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "Service "+serviceInstanceName);
393 @FeatureTogglingTest(FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI)
394 public void createNewServiceInstance_collectionResource() {
395 prepareServicePreset(collectionResourceService, false);
396 String requestId = uuid();
397 String instanceId = uuid();
399 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
400 PRESET_MTN6_TO_ATT_AIC,
401 PresetMsoCreateMacroCommonPre1806.ofCollectionResource(requestId, instanceId),
402 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
405 ServiceData serviceData = new ServiceData(
406 collectionResourceService.modelVersionId,
408 IS_GENERATED_NAMING.TRUE, true, true, false,
410 null, 0, null, new ArrayList<>(), null, false);
411 createMacroService(serviceData, false, randomAlphabetic(5), true, 1);
413 drawingBoardPage.deploy();
414 drawingBoardPage.verifyServiceCompletedOnTime("CR_sanity", "service with collection resource");
418 @FeatureTogglingTest(FLAG_1908_TRANSPORT_SERVICE_NEW_INSTANTIATION_UI)
419 public void createNewServiceInstance_transportService() {
420 prepareServicePreset(transportWithPnfsService, false);
421 String requestId = uuid();
422 String instanceId = uuid();
424 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
425 PresetMsoCreateMacroCommonPre1806.ofTransportService(requestId, instanceId),
426 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
429 ServiceData serviceData = new ServiceData(
430 transportWithPnfsService.modelVersionId,
432 IS_GENERATED_NAMING.TRUE, true, true, false,
434 null, 0, null, new ArrayList<>(), null, false);
435 createMacroService(serviceData, false, randomAlphabetic(5), false, 1);
437 drawingBoardPage.deploy();
438 drawingBoardPage.verifyServiceCompletedOnTime("AIM Transport SVC_ym161f", "transport service");
442 @FeatureTogglingTest(FLAG_1902_VNF_GROUPING)
443 public void createNewServiceInstance_aLaCarte_VnfGrouping() {
445 String randomAlphabetic = randomAlphabetic(5);
447 ServiceData serviceData = new ServiceData(
448 aLaCarteVnfGroupingService.modelVersionId,
450 IS_GENERATED_NAMING.FALSE, false, true, false,
451 null, null, 0, null, ImmutableList.of(), null, false);
452 prepareServicePreset(aLaCarteVnfGroupingService, false);
454 createALaCarteService(serviceData, randomAlphabetic);
456 // this is the instance-name that createALaCarteService is using
457 String serviceInstanceName = randomAlphabetic + "instancename";
459 final String requestId = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
460 final String serviceInstanceId = "d2391436-8d55-4fde-b4d5-72dd2cf13cgh";
461 final ImmutableMap<Keys, String> names = ImmutableMap.<Keys, String>builder()
462 .put(Keys.SERVICE_NAME, serviceInstanceName)
464 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
465 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, requestId, serviceInstanceId, "us16807000"),
466 new PresetAAIPostNamedQueryForViewEdit(serviceInstanceId, serviceInstanceName, false, false)
467 ), SimulatorApi.RegistrationStrategy.APPEND);
469 drawingBoardPage.deploy();
470 verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(IN_PROGRESS), false, false);
471 verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(COMPLETED), false, true);
472 InstantiationStatusPage.verifyOpenNewViewEdit(serviceInstanceName, serviceInstanceId, aLaCarteVnfGroupingService.modelVersionId, "TYLER SILVIA", "e433710f-9217-458d-a79d-1c7aff376d89", "EDIT");
475 public interface Invoker{
479 private void doReduxStep(Map<String, String> reduxStates, String randomAlphabetic, int startInStep, String reduxForStep, MutableInt currentStep, String mode, Invoker todo) {
483 if (currentStep.getValue() < startInStep) {
484 // skip up to startInStep
486 } else if (currentStep.getValue() == startInStep) {
488 vidBasePage.setReduxState(reduxForStep);
490 vidBasePage.navigateTo("serviceModels.htm#/servicePlanning?serviceModelId=6b528779-44a3-4472-bdff-9cd15ec93450");
491 vidBasePage.goToIframe();
494 reduxStates.put(String.valueOf(currentStep), vidBasePage.getReduxState());
499 // log current redux state, before invocation
500 reduxStates.put(String.valueOf(currentStep), vidBasePage.getReduxState());
501 logger.info("reduxGator runtime reduxState for step {}:\n{}", currentStep, vidBasePage.getReduxState());
507 } catch (AssertionError | Exception e) {
508 throw new AssertionError(String.join("\n",
509 "Current step: " + currentStep,
510 "Random alphabetic: " + randomAlphabetic,
511 "Starting reduxState: " + reduxStates.get(String.valueOf(currentStep)),
512 "Current reduxState: " + vidBasePage.getReduxState()
516 logger.info("Cumulative reduxState: {}", reduxStates);
517 currentStep.increment();
521 //@Step("duplicate vnf")
522 private void duplicateVnf(VnfData vnfData, int count) {
523 hoverAndClickDuplicateButton(extractNodeToEdit(vnfData));
524 vidBasePage.screenshotDeployDialog("duplicateVnf-" + vnfData.vnfName);
525 List<WebElement> options = ((RemoteWebElement)Get.byId("duplicate-select")).findElementsByTagName("option");
526 assertThat(options.stream().map(x -> x.getText()).collect(Collectors.toList()), Matchers.contains("1","2"));
527 SelectOption.byIdAndVisibleText("duplicate-select", String.valueOf(count));
528 Click.byClassAndVisibleText("sdc-button__primary", "DUPLICATE");
531 private String cleanSeparators(String... s) {
532 return String.join("", s).replace(" ", "");
535 //@Step("edit vf module and just set name")
536 private void editVfModuleAndJustSetName(String vfModuleName, String vfModuleUUID) {
537 hoverAndClickEditButton(vfModuleUUID + "-" + vfModuleName);
538 Input.text("VF instance name ZERO", "instanceName");
539 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
543 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfTrue_vgNameFalse() {
544 ServiceData serviceData = new ServiceData(
545 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
547 IS_GENERATED_NAMING.FALSE, true, false, true,
548 "2017-488_PASQUALE-vPE 0",
549 vfModule0Name, 1, "1", new ArrayList<>(), vfModule0UUID, false);
551 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
553 final String serviceInstanceName = createMacroService(serviceData, true);
554 createVnf(serviceData, true, serviceInstanceName);
555 createVfModule(serviceData, serviceInstanceName, true, false);
560 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameFalse() {
561 ServiceData serviceData = new ServiceData(
562 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
564 IS_GENERATED_NAMING.FALSE, false, false, false,
565 "2017-488_PASQUALE-vPE 0",
566 vfModule0Name, 1, "1", new ArrayList<>(), vfModule0UUID, false);
568 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
570 final String serviceInstanceName = createMacroService(serviceData, true);
571 createVnf(serviceData, true, serviceInstanceName);
572 createVfModule(serviceData, serviceInstanceName, true, false);
577 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameTrue() throws Exception {
578 ServiceData serviceData = new ServiceData(
579 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
581 IS_GENERATED_NAMING.FALSE, false, true, false,
582 "2017-488_PASQUALE-vPE 0",
583 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
584 NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5", false);
586 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
588 final String serviceInstanceName = createMacroService(serviceData, true);
589 createVnf(serviceData, true, serviceInstanceName);
590 clickRemoveVfModule(vfModule0UUID, vfModule0Name);
591 createVfModule(serviceData, serviceInstanceName, false, true);
596 @FeatureTogglingTest(FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI)
597 public void createNewServiceInstance_aLaCarte_WithVnf() {
598 final ModelInfo serviceModelInfo = ModelInfo.aLaCarteServiceCreationNewUI;
599 String serviceInstanceName = "ALaCarteWithVnf"+randomAlphabetic(5);
600 String vnfInstanceName= "VnfForALaCarte"+randomAlphabetic(5);
601 VnfData vnfData = new VnfData("vOCG_1804_VF 0", "aca3f7b1-15f9-45a5-b182-b8b5aca84a76", vnfInstanceName, true);
602 VfData vfmData = new VfData("vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0", false, 1, "1", emptyList(), "815db6e5-bdfd-4cb6-9575-82c36df8747a", null);
603 ServiceData serviceData = new ServiceData(IS_GENERATED_NAMING.TRUE, vnfData, vfmData, true);
605 resetGetServicesCache();
607 prepareServicePreset(serviceModelInfo, true);
609 String requestorID = getUserCredentials().getUserId();
611 String serviceRequestId = uuid();
612 String serviceInstanceId = uuid();
613 String vnfRequestId = uuid();
614 String vnfInstanceId = uuid();
615 String vfm0RequestId = uuid();
616 String vfm0InstanceId = uuid();
617 String vg1RequestId = uuid();
618 String vg1InstanceId = uuid();
619 String vfm1RequestId = uuid();
620 String vfm1InstanceId = uuid();
621 String vfm12RequestId = uuid();
622 String vfm12InstanceId = uuid();
624 ModelInfoWithCustomization vfm0 = new ModelInfoWithCustomization(
625 "815db6e5-bdfd-4cb6-9575-82c36df8747a",
626 "e9c795c8-6b98-4db3-bd90-a84b8ca5181b",
627 "Vocg1804Vf..base_ocg..module-0",
630 "Vocg1804Vf..base_ocg..module-0",
631 "a7b333d7-7633-4197-b40d-80fcfcadee94");
633 ModelInfoWithCustomization vg1 = new ModelInfoWithCustomization(
634 "9c219e70-1177-494b-8977-1395c9f9168c",
635 "0ad14d60-98b6-4575-a9b8-458a796c3f98",
636 "Vocg1804Vf..ocgmgr..module-1",
639 "Vocg1804Vf..ocgmgr..module-1",
640 "f332f3ce-434d-4084-a1e7-5261c16d4940"
643 ModelInfoWithCustomization vfm1 = new ModelInfoWithCustomization(
644 "9c219e70-1177-494b-8977-1395c9f9168c",
645 "0ad14d60-98b6-4575-a9b8-458a796c3f98",
646 "Vocg1804Vf..ocgmgr..module-1",
649 "Vocg1804Vf..ocgmgr..module-1",
650 "f332f3ce-434d-4084-a1e7-5261c16d4940"
653 ModelInfoWithCustomization vfm12 = new ModelInfoWithCustomization(
654 "b601eef4-62fd-4201-a788-ae30e06a1aec",
655 "e3cb8b85-7a3c-4897-b20b-70640c26d671",
656 "Vocg1804Vf..ocgapp_001..module-12",
659 "Vocg1804Vf..ocgapp_001..module-12",
660 "fcc82961-865e-4d38-9c7a-207c511405b6"
663 final String vgName = "vg_for_module1";
665 String vgRelatedInstance = ",{\"relatedInstance\": {"
666 + " \"modelInfo\": {"
667 + " \"modelType\": \"volumeGroup\""
669 + " \"instanceId\": \""+vg1InstanceId+"\","
670 + " \"instanceName\": \""+vgName+"\""
674 registerExpectationFromPresets(
676 new PresetMSOCreateServiceInstanceAlacarte(
677 ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
678 serviceRequestId, serviceInstanceId,
679 requestorID, serviceModelInfo),
680 PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
681 new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
682 new PresetMSOCreateVnfALaCarteE2E(vnfRequestId, serviceInstanceId, vnfInstanceId, "ONAP", requestorID, serviceModelInfo),
683 new PresetMSOOrchestrationRequestGet(COMPLETE, vnfRequestId),
684 PRESET_MTN6_TO_ATT_AIC,
685 new PresetMSOCreateVfModuleALaCarteE2E(vfm0RequestId, vfm0InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm0, null),
686 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm0RequestId),
687 new PresetMSOCreateVfModuleALaCarteE2E(vg1RequestId, vg1InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, vgName, vg1, null),
688 new PresetMSOOrchestrationRequestGet(COMPLETE, vg1RequestId),
689 new PresetMSOCreateVfModuleALaCarteE2E(vfm1RequestId, vfm1InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm1, vgRelatedInstance),
690 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm1RequestId),
691 new PresetMSOCreateVfModuleALaCarteE2E(vfm12RequestId, vfm12InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm12, null),
692 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm12RequestId)
697 loadServicePopup(serviceModelInfo.modelVersionId);
698 fillALaCarteServicePopup(serviceInstanceName);
700 createVnf(vnfData, false, serviceInstanceName);
701 createVfModule(serviceData, serviceInstanceName, true, false);
702 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);
703 createVfModule(serviceData, serviceInstanceName, false, false);
704 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);
705 createVfModule(serviceData, serviceInstanceName, false, false);
706 drawingBoardPage.deploy();
707 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "service "+serviceInstanceName);
711 @FeatureTogglingTest(FLAG_5G_IN_NEW_INSTANTIATION_UI)
712 public void createNewServiceInstance_aLaCarte_withNetwork_validPopupDataAndUI() {
713 String serviceInstanceName = "NcService"+randomAlphabetic(5);
714 String networkInstanceName= "NcNetowrk"+randomAlphabetic(5);
715 String defactoNetworkInstanceName = "ExtVL"+networkInstanceName;
717 prepareServicePreset(aLaCarteNetworkProvider5G, true);
718 String serviceRequestId = uuid();
719 String networkRequestId = uuid();
720 String requestorID = getUserCredentials().getUserId();
721 registerExpectationFromPresets(
723 new PresetMSOCreateServiceInstanceAlacarte(
724 ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
725 serviceRequestId, DEFAULT_SERVICE_INSTANCE_ID,
726 requestorID, aLaCarteNetworkProvider5G),
727 new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
728 PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
729 new PresetMSOCreateNetworkALaCarte5G(networkRequestId, DEFAULT_SERVICE_INSTANCE_ID, defactoNetworkInstanceName, requestorID),
730 new PresetMSOOrchestrationRequestGet(COMPLETE, networkRequestId),
731 new PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork(
732 new ResponseDetails(serviceInstanceName, serviceRequestId, COMPLETE, "service"),
733 new ResponseDetails(defactoNetworkInstanceName, networkRequestId, COMPLETE, "network"),
734 DEFAULT_SERVICE_INSTANCE_ID)
738 loadServicePopup(aLaCarteNetworkProvider5G.modelVersionId);
739 fillALaCarteServicePopup(serviceInstanceName);
740 VnfData networkData = new VnfData("SR-IOV Provider-1", "840ffc47-e4cf-46de-8e23-525fd8c6fdc3", defactoNetworkInstanceName, false);
741 createNetwork(networkData, false, false, serviceInstanceName);
743 drawingBoardPage.deploy();
744 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "service "+serviceInstanceName);
747 private void fillALaCarteServicePopup(String serviceInstanceName) {
748 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
749 WebElement instanceNameInput = Get.byId("instanceName");
750 instanceNameInput.sendKeys(serviceInstanceName);
751 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
752 String serviceType = "TYLER SILVIA";
753 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
754 browseASDCPage.selectServiceTypeByName(serviceType);
755 SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
756 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
757 Click.byTestId("form-set");
758 VidBasePage.goOutFromIframe();
759 browseASDCPage.goToIframe();
763 public void createNewServiceInstance_macro_validPopupDataAndUI() {
765 List<String> serviceDynamicFields = Arrays.asList("2017488 pasqualevpe0 asn:");
766 ServiceData serviceData = new ServiceData(
767 macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails.modelVersionId,
768 serviceDynamicFields,
769 IS_GENERATED_NAMING.TRUE, true, true, false,
770 "2017-488_PASQUALE-vPE 0",
771 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
772 NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(),
773 "25284168-24bb-4698-8cb4-3f509146eca5", false);
775 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
777 final String serviceInstanceName = createMacroService(serviceData, true);
778 createVnf(serviceData, true, serviceInstanceName);
779 clickRemoveVfModule(vfModule0UUID, vfModule0Name);
780 createVfModule(serviceData, serviceInstanceName, false, false);
784 //@Step("deploy and verify module in pending table")
785 private void deployAndVerifyModuleInPendingTableMacro(String serviceInstanceName, String requestId1, String requestId2) {
786 drawingBoardPage.deploy();
788 boolean simulatorUpdated = false;
790 int[] ids = {0, 0, 1, 2};
791 String[] statuses = {IN_PROGRESS, COMPLETED, IN_PROGRESS, PENDING};
792 for (int i = 0; i < ids.length; i++) {
793 String actualInstanceName = getActualInstanceName(serviceInstanceName, ids[i]);
794 verifyModuleInPendingTable(actualInstanceName, requestId1, requestId2, ImmutableSet.of(statuses[i]), true, simulatorUpdated);
795 simulatorUpdated = true;
797 vidBasePage.screenshotDeployDialog(serviceInstanceName);
800 private void verifyModuleInPendingTable(String serviceInstanceName, String requestId1, String requestId2, Set<String> expectedStatuses, boolean isMacro, boolean simulatorUpdated) {
801 DrawingBoardPage.ServiceStatusChecker serviceStatusChecker = new DrawingBoardPage.ServiceStatusChecker(serviceInstanceName, expectedStatuses);
802 boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2);
803 final String assertionMessage = String.format("service %s: none of rowClasses [%s] is in expectedStatuses: [%s] ",
805 String.join(",", serviceStatusChecker.getColumnClassesSet()),
806 String.join(",", expectedStatuses));
808 assertTrue(assertionMessage, statusIsShown);
811 InstantiationStatusPage.assertInstantiationStatusRow(
812 serviceInstanceName, expectedRowFields(serviceInstanceName));
814 InstantiationStatusPage.assertInstantiationStatusRow(
815 serviceInstanceName, expectedALaCarteRowFields(serviceInstanceName));
818 if (!simulatorUpdated) {
819 if (requestId2 != null) {
820 registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet(IN_PROGRESS, requestId2), APPEND);
822 registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("COMPLETE", requestId1), APPEND);
824 vidBasePage.screenshotDeployDialog(serviceInstanceName);
827 private String getActualInstanceName(String serviceInstanceName, Integer i) {
828 return i==0 ? serviceInstanceName : serviceInstanceName + "_00" + i;
831 //@Step("verify open view edit")
832 private void verifyOpenViewEdit(String serviceInstanceName) {
833 boolean[] openEnabled = {true, false, false};
834 ImmutableList.of(0, 1, 2).forEach(i -> {
835 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
836 if (Features.FLAG_1902_NEW_VIEW_EDIT.isActive() || FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT.isActive()) {
837 InstantiationStatusPage.verifyOpenNewViewEdit(actualInstanceName, openEnabled[i], "EDIT");
840 vidBasePage.verifyOpenOldViewEdit(actualInstanceName, null, openEnabled[i], true, true);
845 //@Step("verify open audit info")
846 private void verifyOpenAuditInfo(String serviceInstanceName) {
847 boolean auditInfoEnabled = true;
848 String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
849 for (Integer i : ImmutableList.of(0, 1, 2)) {
850 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
851 InstantiationStatusPage.checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM, auditInfoEnabled, contextMenuOpen -> {
852 Click.byTestId(contextMenuOpen);
853 checkAuditInfoModal(actualInstanceName, i, statuses);
855 final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName);
856 row.findElement(By.id(Constants.InstantiationStatus.TD_JOB_STATUS_ICON + "-" + (i))).click();
857 checkAuditInfoModal(actualInstanceName, i, statuses);
861 private void checkAuditInfoModal(String actualInstanceName, Integer i, String[] statuses) {
863 Wait.waitByTestId("vidJobStatus", 10);
865 WebElement webElement = Get.byTestId("model-item-value-serviceInstanceName");
866 assertEquals(webElement.getText(), actualInstanceName, "Service Instance Name must be equal");
868 WebElement vidTableElement = Get.byId("service-instantiation-audit-info-vid");
869 assertEquals(3, vidTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "VID table must contain 3 columns");
871 List<WebElement> vidStatusesElements = vidTableElement.findElements(By.id("vidJobStatus"));
872 List<String> vidStatuses = vidStatusesElements.stream()
874 convertUITextCapitalizeAndFormatPipe(s.getText()))
875 .collect(Collectors.toList());
877 List<String> serviceStatus = Arrays.asList(Arrays.copyOfRange(statuses, i, statuses.length));
878 assertThat("statuses for " + actualInstanceName + " must be as expected", vidStatuses, containsInAnyOrder(serviceStatus.toArray()));
879 String dateString = vidTableElement.findElements(By.id("vidStatusTime")).get(0).getText();
880 assertTrue("vid Status Time column must contains valid date in format : MMM dd, yyyy HH:mm", isDateValid(dateString, "MMM dd, yyyy HH:mm"));
882 WebElement MSOTableElement = Get.byId("service-instantiation-audit-info-mso");
883 assertEquals(3, MSOTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "MSO table must contain 3 columns");
885 if (statuses[i].equals(PENDING)) {
886 assertEquals(0, MSOTableElement.findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(), "When status is PENDING MSO table is empty");
889 vidBasePage.screenshotDeployDialog("audit-info-" + actualInstanceName);
890 Click.byId(Constants.AuditInfoModal.CANCEL_BUTTON);
893 private String convertUITextCapitalizeAndFormatPipe(String text) {
894 return text.toUpperCase().replace("-", "_");
897 private boolean isDateValid(String dateToValidate, String dateFromat) {
899 if (dateToValidate == null) {
902 SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
903 sdf.setLenient(false);
905 //if not valid, it will throw ParseException
906 Date date = sdf.parse(dateToValidate);
908 } catch (ParseException e) {
915 //@Step("verifyDeleteJob")
916 private void verifyDeleteJob(String serviceInstanceName) {
917 boolean[] deleteEnabled = {false, false, true};
918 String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
919 verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE, statuses, deleteEnabled, "deleted");
922 //@Step("verify hide job")
923 private void verifyHideJob(String serviceInstanceName) {
924 boolean[] hideEnabled = {true, false};
925 String[] statuses = {COMPLETED, IN_PROGRESS};
926 verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HIDE, statuses, hideEnabled, "hidden");
929 private void verifyDeleteOrHideOperation(String serviceInstanceName, String contextMenuItem, String[] statuses, boolean[] operationEnabled, String operationName) {
930 for (int i = 0; i < statuses.length; i++) {
931 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
932 InstantiationStatusPage.checkMenuItem(actualInstanceName, contextMenuItem, operationEnabled[i], contextMenuDelete -> {
933 Click.byTestId(contextMenuDelete);
934 GeneralUIUtils.ultimateWait();
935 assertNull(actualInstanceName + " should be " + operationName,
936 InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName));
939 vidBasePage.screenshotDeployDialog(serviceInstanceName);
942 private ImmutableMap<String, String> expectedRowFields(String actualInstanceName) {
943 return ImmutableMap.<String, String>builder()
944 .put("userId", getUserCredentials().getUserId())
945 .put("serviceModelName", "action-data")
946 .put("serviceInstanceName", actualInstanceName)
947 .put("serviceModelVersion", "1.0")
948 .put("subscriberName", "SILVIA ROBBINS")
949 .put("serviceType", "TYLER SILVIA")
950 .put("regionId", "hvf6")
951 .put("tenantName", "AIN Web Tool-15-D-testalexandria")
952 .put("aicZoneName", "NFTJSSSS-NFT1")
953 .put("project", "WATKINS")
954 .put("owningEntityName", "WayneHolland")
955 .put("pause", "false")
959 private ImmutableMap<String, String> expectedALaCarteRowFields(String actualInstanceName) {
960 return ImmutableMap.<String, String>builder()
961 .put("userId", getUserCredentials().getUserId())
962 .put("serviceModelName", "Grouping Service for Test")
963 .put("serviceInstanceName", actualInstanceName)
964 .put("serviceModelVersion", "1.0")
965 .put("subscriberName", "SILVIA ROBBINS")
966 .put("serviceType", "TYLER SILVIA")
967 .put("project", "WATKINS")
968 .put("owningEntityName", "WayneHolland")
969 .put("pause", "false")
973 //@Step("create sriov service")
974 private String createMacroService(ServiceData serviceData, boolean tryCancelsAndReentries) {
975 return createMacroService(serviceData, tryCancelsAndReentries, randomAlphabetic(5), true, 3);
978 //@Step("create sriov service")
979 private String createMacroService(ServiceData serviceData, boolean tryCancelsAndReentries, String randomAlphabetic, boolean fillLcpRegionAndTenantAndZone, int bulkSize) {
980 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
981 User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
983 // simulate typing with spaces, but expected is without spaces
984 String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
985 String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
987 List<String> cycles = tryCancelsAndReentries ? ImmutableList.of("WILL_CANCEL", "AFTER_CANCEL") : ImmutableList.of("SINGLE_SHOT");
988 cycles.forEach(cycle -> {
989 if ("AFTER_CANCEL".equals(cycle)) {
990 loadServicePopupOnBrowseASDCPage(serviceData.modelUuid);
992 loadServicePopup(serviceData.modelUuid);
995 WebElement instanceName = Get.byId("instanceName");
996 boolean isRequired = isElementByIdRequired("instanceName-label");
997 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
998 Assert.assertNotNull(instanceName, "instance name input should be visible when serviceEcompNaming == true.");
999 Assert.assertFalse(isRequired,"instance name input should be optional when ecompNaming == true.");
1001 Assert.assertTrue(isRequired,"instance name input should be required when serviceEcompNaming == false.");
1004 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.FALSE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1005 instanceName.sendKeys(serviceInstanceName);
1007 String setButtonTestId = "form-set";
1009 //serviceType should be dependent on subscriber selection
1010 assertElementDisabled("serviceType-select");
1011 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
1012 GeneralUIUtils.ultimateWait();
1013 Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
1014 if (Features.FLAG_RESTRICTED_SELECT.isActive())
1015 assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
1017 assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
1020 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
1021 //lcpRegion should be dependent on serviceType selection
1022 assertElementDisabled("lcpRegion-select");
1024 String serviceType = "TYLER SILVIA";
1025 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
1026 browseASDCPage.selectServiceTypeByName(serviceType);
1028 String owningEntity = "WayneHolland";
1029 GeneralUIUtils.ultimateWait();
1030 Wait.waitByClassAndText(Constants.CreateNewInstance.OWNING_ENTITY_OPTION, owningEntity, 30);
1031 SelectOption.byTestIdAndVisibleText(owningEntity, (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
1032 assertSetButtonDisabled(setButtonTestId);
1034 SelectOption.byTestIdAndVisibleText("ERICA", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
1035 browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89");
1037 if (fillLcpRegionAndTenantAndZone) {
1039 //we assume that if fillLcpRegionAndTenantAndZone is true tenant and lcpRegion are required for this service model
1040 //If you want to fill lcpRegionAndTenant where they are optional you can refactor this test...
1041 assertSetButtonDisabled(setButtonTestId);
1043 //tenant should be dependent on lcpRegion selection
1044 assertElementDisabled("tenant-select");
1046 String lcpRegion = "hvf6";
1047 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1048 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1050 GeneralUIUtils.ultimateWait();
1051 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1053 browseASDCPage.selectAicZone("NFT1");
1056 assertSetButtonEnabled(setButtonTestId);
1059 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
1061 assertNotificationAreaVisibilityBehaviourAndSetBulkSize(bulkSize);
1064 assertPauseOnPausePointsVisibility(serviceData.multiStageDesign);
1066 validateDynamicFields(serviceData.dynamicFields);
1068 vidBasePage.screenshotDeployDialog("createMacroService-" + serviceInstanceName);
1070 if ("WILL_CANCEL".equals(cycle)) {
1071 Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID);
1073 Click.byTestId(setButtonTestId);
1076 VidBasePage.goOutFromIframe();
1078 browseASDCPage.goToIframe();
1081 return serviceInstanceName;
1084 private String createALaCarteService(ServiceData serviceData, String randomAlphabetic) {
1085 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1086 User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
1088 // simulate typing with spaces, but expected is without spaces
1089 String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
1090 String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
1092 loadServicePopup(serviceData.modelUuid);
1094 WebElement instanceName = Get.byId("instanceName");
1095 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1096 Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true.");
1098 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.FALSE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1099 instanceName.sendKeys(serviceInstanceName);
1102 //serviceType should be dependent on subscriber selection
1103 assertElementDisabled("serviceType-select");
1104 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
1105 GeneralUIUtils.ultimateWait();
1106 Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
1107 if (Features.FLAG_RESTRICTED_SELECT.isActive())
1108 assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
1110 assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
1113 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
1115 String serviceType = "TYLER SILVIA";
1116 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
1117 browseASDCPage.selectServiceTypeByName(serviceType);
1119 String setButtonTestId = "form-set";
1120 assertSetButtonDisabled(setButtonTestId);
1122 SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
1124 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
1126 validateDynamicFields(serviceData.dynamicFields);
1128 vidBasePage.screenshotDeployDialog("createALaCarteService-" + serviceInstanceName);
1130 Click.byTestId(setButtonTestId);
1132 VidBasePage.goOutFromIframe();
1134 browseASDCPage.goToIframe();
1136 return serviceInstanceName;
1139 private void assertElementExistAccordingTagNameAndTestId(String tag, String testId) {
1140 WebElement webElement = Get.byId(testId);
1141 Assert.assertEquals(webElement.getTagName(), tag);
1144 //@Step("create vnf")
1145 private void createVnf(ServiceData serviceData, boolean tryCancelsAndReentries, String serviceInstanceName) {
1146 createVnf(serviceData.vnfData, tryCancelsAndReentries, serviceInstanceName);
1149 private void createNetwork(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName) {
1150 createVnf(vnfData, tryCancelsAndReentries, addedByDefault, serviceInstanceName, true);
1153 private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, String serviceInstanceName) {
1154 createVnf(vnfData, tryCancelsAndReentries, true, serviceInstanceName, false);
1157 private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName, boolean isNetwork) {
1158 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1160 String nodeToEdit = extractNodeToEdit(vnfData);
1161 if (addedByDefault) {
1162 hoverAndClickEditButton(nodeToEdit);
1164 drawingBoardPage.clickAddButtonByNodeName(vnfData.vnfName);
1167 GeneralUIUtils.ultimateWait();
1169 if (vnfData.isGeneratedNaming) {
1170 Assert.assertFalse(isElementByIdRequired("instanceName-label") ,"instance name input should be optional when EcompNaming == true, and required when false.");
1172 Input.text(vnfData.vnfInstanceName, "instanceName");
1176 //tenant should be dependent on lcpRegion selection
1177 assertElementDisabled("tenant-select");
1179 WebElement legacyRegion = Get.byTestId("lcpRegionText");
1180 Assert.assertNull(legacyRegion, "legacy region shouldn't be visible when lcp region isn't AAIAIC25,olson3 or olson5a.");
1182 browseASDCPage.selectLcpRegion("AAIAIC25");
1184 legacyRegion = Get.byTestId("lcpRegionText");
1185 Assert.assertNotNull(legacyRegion, "legacy region should be visible when lcp region is AAIAIC25,olson3 or olson5a.");
1187 browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e86");
1189 assertSetButtonDisabled(VNF_SET_BUTTON_TEST_ID);
1192 browseASDCPage.selectPlatform("platform");
1194 SelectOption.selectOptionsFromMultiselectById("multi-selectPlatform", ImmutableList.of("platform"));
1197 browseASDCPage.selectLineOfBusiness("ONAP");
1198 assertSetButtonEnabled(VNF_SET_BUTTON_TEST_ID);
1200 browseASDCPage.setLegacyRegion("some legacy region");
1203 Wait.waitByTestId("model-item-value-subscriberName", 10);
1204 Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1205 if (!vnfData.isGeneratedNaming) {
1206 Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Subscriber name should be shown in vf module");
1209 vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName);
1210 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
1214 if (tryCancelsAndReentries) {
1215 hoverAndClickEditButton(nodeToEdit);
1217 Wait.byText("TYLER SILVIA");
1218 GeneralUIUtils.ultimateWait();
1219 assertThat(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), startsWith("AAIAIC25"));
1220 Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.TENANT_SELECT_TESTS_ID), "USP-SIP-IC-24335-T-01");
1221 Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID), "ONAP");
1223 Assert.assertTrue(Get.isOptionSelectedInMultiSelect(Constants.OwningEntity.PLATFORM_MULTI_SELECT_TEST_ID, "platform"));
1225 clickToCloseModal(Constants.CANCEL_BUTTON_TEST_ID);
1227 toggleItemInTree(Constants.DrawingBoard.AVAILABLE_MODELS_TREE);
1229 Click.byTestId("node-" + nodeToEdit);
1232 private String extractNodeToEdit(VnfData vnfData) {
1233 return vnfData.vnfUuid + "-" + vnfData.vnfName;
1237 private void toggleItemInTree(String tree) {
1238 Click.byXpath("//tree-root[@data-tests-id='" + tree + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']");
1241 private void hoverAndClickEditButton(String nodeToEdit) {
1242 hoverAndClickButton(nodeToEdit, Constants.DrawingBoard.CONTEXT_MENU_EDIT);
1245 private void hoverAndClickDeleteButton(String nodeToEdit) {
1246 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE);
1249 private void hoverAndClickDuplicateButton(String nodeToEdit) {
1250 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_DUPLICATE);
1252 private void hoverAndClickButton(String nodeToEdit, String contextMenuItem) {
1253 String nodeOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit;
1254 String buttonOfEdit = nodeOfEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON;
1255 GeneralUIUtils.hoverOnAreaByTestId(buttonOfEdit);
1256 Click.byTestId(buttonOfEdit);
1257 Click.byTestId(contextMenuItem);
1260 private void uploadSupplementaryFile(String inputFileName, boolean isValid, BrowseASDCPage browseASDCPage, String setButtonTestId) {
1261 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1262 GeneralUIUtils.ultimateWait();
1263 Input.file("supplementaryFiles/" + inputFileName, "supplementaryFile");
1264 GeneralUIUtils.ultimateWait();
1265 WebElement fileName = Get.byTestId("file-name");
1266 Assert.assertEquals(fileName.getText(),inputFileName);
1267 browseASDCPage.assertButtonState(setButtonTestId, isValid);
1271 private void deleteSupplementaryFile() {
1272 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1273 Click.byTestId("remove-uploaded-file");
1274 GeneralUIUtils.ultimateWait();
1275 WebElement fileName = Get.byTestId("file-name");
1276 Assert.assertEquals(fileName.getText(),"Choose file");
1280 //@Step("create vf module")
1281 private void createVfModule(ServiceData serviceData, String serviceInstanceName, boolean addedByDefault, boolean addOpensPopup) {
1282 clickAddVfModule(serviceData, addedByDefault);
1283 if (!addOpensPopup) {
1284 clickEditVfModule(serviceData);
1286 fillAndSetVfModulePopup(serviceData, serviceInstanceName);
1289 private void fillAndSetVfModulePopup(ServiceData serviceData, String serviceInstanceName) {
1290 String setButtonTestId = "form-set";
1291 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1293 Assert.assertEquals(isElementByIdRequired("instanceName-label"), !serviceData.vnfData.isGeneratedNaming,"instance name input should be optional when EcompNaming == true, and required when false.");
1295 if (!serviceData.vnfData.isGeneratedNaming) {
1296 Input.text("VF instance name", "instanceName");
1299 if (!serviceData.vfData.vgEnabled || (!serviceData.isALaCarte && serviceData.vnfData.isGeneratedNaming)) {
1300 Assert.assertNull(Get.byTestId("volumeGroupName"), "volumeGroupName input should be invisible "
1301 + "when vgEnabled is false or when vgEnabled is true and EcompGenName is true "
1302 + "(was: serviceData.vfData.vgEnabled=>" + serviceData.vfData.vgEnabled + ", serviceData.isGeneratedNaming=>" + IS_GENERATED_NAMING.FALSE + ")");
1305 Assert.assertFalse(isElementByIdRequired("volumeGroupName-label"),
1306 "volume Group name input should be always optional");
1307 if (serviceData.vfData.vgName!=null) {
1308 browseASDCPage.setInputText("volumeGroupName", serviceData.vfData.vgName);
1313 Wait.waitByTestId("model-item-value-subscriberName", 10);
1314 Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1315 Assert.assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(serviceData.vfData.vfMin), "Min should be shown");
1316 if (serviceData.vfData.vfMax!=null) {
1317 if (!serviceData.vfData.vfMax.equals(NO_MAX_INSTANCES_IN_MODEL)) {
1318 Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), serviceData.vfData.vfMax, "Max should be shown");
1321 String defaultMaxText = Features.FLAG_2002_UNLIMITED_MAX.isActive() ? "Unlimited (default)" : "1";
1322 Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), defaultMaxText, "Max should be shown with default value");
1326 if (serviceData.isGeneratedNaming!=IS_GENERATED_NAMING.TRUE) {
1327 Wait.byText(serviceInstanceName);
1328 Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Service name should be shown in vf module");
1331 if (serviceData.isALaCarte) {
1332 String lcpRegion = "hvf6";
1333 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1334 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1335 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1338 validateDynamicFields(serviceData.vfData.dynamicFields);
1340 uploadSupplementaryFile("invalid-file.json", false, browseASDCPage, setButtonTestId);
1341 deleteSupplementaryFile();
1342 uploadSupplementaryFile("sample.json", true, browseASDCPage, setButtonTestId);
1344 browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName);
1345 clickToCloseModal(setButtonTestId);
1348 private void clickToCloseModal(String setOrCancelButtonTestId) {
1349 Click.byTestId(setOrCancelButtonTestId);
1350 GeneralUIUtils.ultimateWait();
1353 private void clickEditVfModule(ServiceData serviceData) {
1354 hoverAndClickEditButton(serviceData.vfData.uuid + "-" + serviceData.vfData.vfName);
1357 private void clickAddVfModule(ServiceData serviceData, boolean addedByDefault) {
1358 if (addedByDefault) {
1361 System.out.println("VFModule should be added 'manually'");
1363 final WebElement vfModuleNode = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + serviceData.vfData.vfName);
1365 if (vfModuleNode == null || !vfModuleNode.isDisplayed()) {
1367 drawingBoardPage.clickNode(serviceData.vnfData.vnfName);
1369 drawingBoardPage.clickAddButtonByNodeName(serviceData.vfData.vfName);
1372 private void clickRemoveVfModule(String vfModuleId, String vfModuleName) {
1373 System.out.println("will remove " + vfModule0Name);
1374 hoverAndClickDeleteButton(vfModuleId + "-" + vfModuleName);
1377 private void assertPauseOnPausePointsVisibility(boolean visibility) {
1378 WebElement pauseElem = Get.byId("Pause");
1379 final String assertionMessage = "pause on pause points visibility should be " + visibility;
1381 Assert.assertNotNull(pauseElem, assertionMessage);
1383 Assert.assertNull(pauseElem, assertionMessage);
1388 private String uuid() {
1389 return UUID.randomUUID().toString();
1393 private void assertNotificationAreaVisibilityBehaviourAndSetBulkSize(int size) {
1394 WebElement webElement = Get.byId("notification-area");
1395 Assert.assertNull(webElement, "notification area should be invisible if only 1 qty.");
1397 SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(size));
1399 webElement = Get.byId("notification-area");
1400 Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty.");
1403 //@Step("prepare service preset")
1404 private void prepareServicePreset(ModelInfo modelInfo, boolean deploy) {
1405 String subscriberId = "e433710f-9217-458d-a79d-1c7aff376d89";
1408 registerExpectationForServiceDeployment(
1411 pasqualeVmxVpeBvService488Annotations
1413 subscriberId, null);
1415 registerExpectationForServiceBrowseAndDesign(ImmutableList.of(modelInfo), subscriberId);
1419 static class ServiceData {
1421 ServiceData(String modelUuid, List<String> dynamicFields, IS_GENERATED_NAMING isServiceGeneratedNaming,
1422 boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName,
1423 String vfName, int vfMin, String vfMax, List<String> vfModuleDynamicFields, String vfVersionId, boolean isALaCarte) {
1424 this.modelUuid = modelUuid;
1425 this.dynamicFields = dynamicFields;
1426 this.isGeneratedNaming = isServiceGeneratedNaming;
1427 this.multiStageDesign = multiStageDesign;
1428 this.isALaCarte = isALaCarte;
1429 this.vnfData = new VnfData(vnfName, "69e09f68-8b63-4cc9-b9ff-860960b5db09", "VNF instance name", isVnfGeneratedNaming);
1430 this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields, vfVersionId, "_abc");
1433 public ServiceData(IS_GENERATED_NAMING isGeneratedNaming, VnfData vnfData, VfData vfData, boolean isALaCarte) {
1434 this.isGeneratedNaming = isGeneratedNaming;
1435 this.vnfData = vnfData;
1436 this.vfData = vfData;
1437 this.isALaCarte = isALaCarte;
1441 List<String> dynamicFields;
1442 IS_GENERATED_NAMING isGeneratedNaming;
1443 boolean multiStageDesign;
1448 enum IS_GENERATED_NAMING { TRUE, FALSE, TRUE_BUT_GIVE_NAME_EITHER_WAY}
1451 private static class VnfData {
1452 VnfData(String vnfName, String vnfUuid, String vnfInstanceName, boolean isGeneratedNaming) {
1453 this.vnfName = vnfName;
1454 this.vnfUuid = vnfUuid;
1455 this.vnfInstanceName = vnfInstanceName;
1456 this.isGeneratedNaming = isGeneratedNaming;
1459 final String vnfName;
1460 final String vnfUuid;
1461 final String vnfInstanceName;
1462 final boolean isGeneratedNaming;
1466 private static class VfData {
1467 VfData(String vfName, boolean vgEnabled, int vfMin, String vfMax, List<String> dynamicFields, String uuid, String vgName) {
1468 this.vfName = vfName;
1469 this.vgEnabled = vgEnabled;
1472 this.dynamicFields = dynamicFields;
1474 this.vgName = vgName;
1480 final String vfName;
1481 final boolean vgEnabled;
1482 final List<String> dynamicFields;
1483 final String vgName;