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_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF;
23 import static vid.automation.test.infra.Features.FLAG_5G_IN_NEW_INSTANTIATION_UI;
24 import static vid.automation.test.infra.Features.FLAG_ENABLE_WEBPACK_MODERN_UI;
25 import static vid.automation.test.infra.ModelInfo.aLaCarteNetworkProvider5G;
26 import static vid.automation.test.infra.ModelInfo.aLaCarteVnfGroupingService;
27 import static vid.automation.test.infra.ModelInfo.collectionResourceService;
28 import static vid.automation.test.infra.ModelInfo.infrastructureVpnService;
29 import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails;
30 import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse;
31 import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse;
32 import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails;
33 import static vid.automation.test.infra.ModelInfo.transportWithPnfsService;
34 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
35 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
36 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
37 import static vid.automation.test.test.ALaCarteflowTest.AIC;
39 import com.google.common.collect.ImmutableList;
40 import com.google.common.collect.ImmutableMap;
41 import com.google.common.collect.ImmutableSet;
42 import java.text.ParseException;
43 import java.text.SimpleDateFormat;
44 import java.util.ArrayList;
45 import java.util.Arrays;
46 import java.util.Collections;
47 import java.util.Date;
48 import java.util.HashMap;
49 import java.util.List;
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.onap.sdc.ci.tests.datatypes.UserCredentials;
58 import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
59 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetL3NetworksByCloudRegionSpecificState;
60 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetTenants;
61 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetVpnsByType;
62 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIPostNamedQueryForViewEdit;
63 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
64 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarte5G;
65 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceAlacarte;
66 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService;
67 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse;
68 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteE2E;
69 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteE2E;
70 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
71 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork;
72 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork.ResponseDetails;
73 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
74 import org.onap.simulator.presetGenerator.presets.mso.PresetMsoCreateMacroCommonPre1806;
75 import org.openqa.selenium.By;
76 import org.openqa.selenium.WebElement;
77 import org.openqa.selenium.remote.RemoteWebElement;
78 import org.testng.Assert;
79 import org.testng.annotations.AfterClass;
80 import org.testng.annotations.BeforeClass;
81 import org.testng.annotations.BeforeMethod;
82 import org.testng.annotations.Test;
83 import vid.automation.test.Constants;
84 import vid.automation.test.Constants.BrowseASDC.NewServicePopup;
85 import vid.automation.test.infra.Click;
86 import vid.automation.test.infra.FeatureTogglingTest;
87 import vid.automation.test.infra.Features;
88 import vid.automation.test.infra.Get;
89 import vid.automation.test.infra.Input;
90 import vid.automation.test.infra.ModelInfo;
91 import vid.automation.test.infra.ModelInfoWithCustomization;
92 import vid.automation.test.infra.SelectOption;
93 import vid.automation.test.infra.Wait;
94 import vid.automation.test.model.Service;
95 import vid.automation.test.model.User;
96 import vid.automation.test.sections.BrowseASDCPage;
97 import vid.automation.test.sections.DrawingBoardPage;
98 import vid.automation.test.sections.InstantiationStatusPage;
99 import vid.automation.test.sections.SideMenu;
100 import vid.automation.test.sections.VidBasePage;
101 import vid.automation.test.services.AsyncJobsService;
102 import vid.automation.test.services.ServicesService;
103 import vid.automation.test.services.SimulatorApi;
104 import vid.automation.test.test.NewServiceInstanceTest.ServiceData.IS_GENERATED_NAMING;
105 import vid.automation.test.utils.ReadFile;
107 @FeatureTogglingTest(FLAG_ENABLE_WEBPACK_MODERN_UI)
108 public class NewServiceInstanceTest extends ModernUITestBase {
110 public static final String COMPLETED = "COMPLETED";
111 private static final String IN_PROGRESS = "IN_PROGRESS";
112 private static final String PENDING = "PENDING";
113 private final String vfModule0Name = "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0";
114 private final String vfModule0UUID = "f8360508-3f17-4414-a2ed-6bc71161e8db";
115 private ServicesService servicesService = new ServicesService();
116 private DrawingBoardPage drawingBoardPage = new DrawingBoardPage();
117 List<String> serviceModelLabelList = Arrays.asList("Model version", "Description", "Category", "UUID",
118 "Invariant UUID", "Service type", "Service role");
119 List<String> mandatoryServiceModelLabelList = Arrays.asList("Model version", "UUID", "Invariant UUID");
120 private final VidBasePage vidBasePage = new VidBasePage();
121 public static final String VNF_SET_BUTTON_TEST_ID = "form-set";
122 private static final Logger logger = LogManager.getLogger(NewServiceInstanceTest.class);
123 private static final String NO_MAX_INSTANCES_IN_MODEL = "NO_MAX_INSTANCES_IN_MODEL";
126 protected void dropAllAsyncJobs() {
127 AsyncJobsService asyncJobsService = new AsyncJobsService();
128 asyncJobsService.dropAllAsyncJobs();
132 protected void muteAllAsyncJobs() {
133 AsyncJobsService asyncJobsService = new AsyncJobsService();
134 asyncJobsService.muteAllAsyncJobs();
138 protected void goToWelcome() {
139 SideMenu.navigateToWelcomePage();
143 protected UserCredentials getUserCredentials() {
144 String userName = Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA;
145 User user = usersService.getUser(userName);
146 return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
150 public void createNewServiceInstance_fullModelData_LeftPaneLabelsCorrect() throws Exception {
151 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
152 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
153 assertServiceModelLabelsCorrect(serviceModelLabelList);
157 public void createNewServiceInstance_partialModelData_LeftPaneLabelsCorrect() throws Exception {
158 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
159 loadServicePopup(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails);
160 assertServiceModelLabelsCorrect(mandatoryServiceModelLabelList);
164 public void createNewServiceInstance_setFieldValue_resetDependenciesListsAndValues() {
165 resetGetTenantsCache();
167 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
168 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
169 SimulatorApi.registerExpectation(Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_CAR_2020_ER, SimulatorApi.RegistrationStrategy.APPEND);
170 registerExpectationFromPreset(
171 new PresetAAIGetTenants(
173 "MSO-dev-service-type",
174 "registration_to_simulator/create_new_instance/aai_get_tenants_for_customer_CAR_2020_ER.json"),
175 SimulatorApi.RegistrationStrategy.APPEND);
177 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
178 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
179 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
180 GeneralUIUtils.ultimateWait();
181 String serviceType = "TYLER SILVIA";
182 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
183 browseASDCPage.selectServiceTypeByName(serviceType);
184 String lcpRegion = "hvf6";
185 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
186 viewEditPage.selectLcpRegion(lcpRegion, AIC);
187 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
189 VidBasePage.selectSubscriberById("CAR_2020_ER");
190 assertElementDisabled("lcpRegion-select");
191 serviceType = "MSO-dev-service-type";
192 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
193 browseASDCPage.selectServiceTypeByName(serviceType);
194 lcpRegion = "CAR_2020_ER";
195 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
196 viewEditPage.selectLcpRegion(lcpRegion, AIC);
197 browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e66");
199 resetGetTenantsCache();
204 * asserts that the provided labels list is visible and that no other detail item appears in the model details panel.
206 protected void assertServiceModelLabelsCorrect(List<String> serviceModelLabelList) throws Exception {
207 WebElement genericPopup = getDriver().findElement(By.tagName("generic-form-popup"));
208 WebElement modelInformation = genericPopup.findElement(By.id("model-information"));
209 List<WebElement> modelInformationItems = modelInformation.findElements(By.xpath("./div"));
210 assertEquals(modelInformationItems.size(), serviceModelLabelList.size());
211 serviceModelLabelList.forEach(label -> {
212 WebElement webElement = Get.byTestId("model-item-" + label);
213 WebElement itemWarpper = webElement.findElements(By.className("wrapper")).get(0);
214 assertEquals(itemWarpper.findElements(By.tagName("label")).get(0).getText(), label, "model details item label is incorrect.");
219 public void createNewServiceInstance_leftPane_serviceModelDataCorrect() {
220 Service service = servicesService.getService(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId);
221 String prefix = NewServicePopup.SERVICE_MODEL_DATA_TEST_ID_VALUE_PREFIX;
222 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
223 loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
224 logger.info("Expected service model properties: "+service.toString());
225 assertModelDataCorrect(NewServicePopup.SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID, prefix, service);
228 @Test(groups = "partialGroup_5")
229 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingFalse() {
231 ServiceData serviceData = new ServiceData(
232 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
234 IS_GENERATED_NAMING.FALSE, true, true, true,
235 "2017-488_PASQUALE-vPE 0",
236 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
237 0, NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5", false);
239 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
241 final String serviceInstanceName = createMacroService(serviceData, true);
242 createVnf(serviceData, true, serviceInstanceName);
244 createVfModule(serviceData, serviceInstanceName, false, false);
248 @Test(groups = "underDevelopment")
249 public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_DEV() {
251 Upon failure in test dynamicFieldsEcompNamingFalse_FLESH(), exception will provide
252 the needed data for this DEV method:
254 1. "Current step" when the failure occurred
255 2. "Random alphabetic" that was randomized while test
256 3. "Starting reduxState" that was on the step that failed.
258 These data can be used for, accordingly, 1. startInStep param; 2, randomAlphabetic
259 param; 3. reduxForStep param.
262 // It should be easier to put `reduxForStep` in this file, to avoid Java's code-clutter and json escaping.
263 final String reduxForStep = ReadFile.loadResourceAsString(
264 "NewServiceInstanceTest/createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse.json");
266 createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("DEV", 5, reduxForStep, "mCaNk");
269 @Test(groups = "partialGroup_5")
270 public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse() {
271 createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("RUNTIME", 0, null, randomAlphabetic(5));
274 private void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH(String mode, int startInStep, String reduxForStep, String randomAlphabetic) {
276 MutableInt i = new MutableInt();
277 Map<String, String> reduxStates = new HashMap<>();
279 ServiceData serviceData = new ServiceData(
280 macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse.modelVersionId,
281 Collections.singletonList("2017488 pasqualevpe0 asn:"),
282 IS_GENERATED_NAMING.FALSE, false, true, false,
283 "2017-488_PASQUALE-vPE 0",
284 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
285 NO_MAX_INSTANCES_IN_MODEL, ImmutableList.of("Bandwidth", "Bandwidth units"),
286 "25284168-24bb-4698-8cb4-3f509146eca5", false);
288 // this is the instance-name that createMacroService is going to use
289 String serviceInstanceName = randomAlphabetic + "instancename";
291 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
292 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
294 createMacroService(serviceData, false, randomAlphabetic, true, 3);
297 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
298 createVnf(serviceData, false, serviceInstanceName)
301 final String vnfInstanceName2 = randomAlphabetic + "instanceName";
302 final String vnfName2 = "2017-388_PASQUALE-vPE";
304 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
305 createVnf(new VnfData(vnfName2 + " 0", "afacccf6-397d-45d6-b5ae-94c39734b168", vnfInstanceName2, false),
306 false, serviceInstanceName)
309 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
310 createVfModule(serviceData, serviceInstanceName, false, true)
313 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
315 editVfModuleAndJustSetName(vfModule0Name, vfModule0UUID);
316 duplicateVnf(serviceData.vnfData, 2);
317 vidBasePage.screenshotDeployDialog(serviceInstanceName);
320 doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
321 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
324 final String vfModuleName1 = "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0";
325 final String vfModuleName2 = "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1";
326 final String request1 = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
327 final String request2 = "ce010256-3fdd-4cb5-aed7-37112a2c6e93";
328 final ImmutableMap<Keys, String> vars = ImmutableMap.<Keys, String>builder()
329 .put(Keys.SERVICE_NAME, serviceInstanceName)
330 .put(Keys.VNF_NAME, cleanSeparators("2017-488_PASQUALE-vPE", serviceData.vnfData.vnfInstanceName))
331 .put(Keys.VFM_NAME1, cleanSeparators(vfModuleName1 , "VF instance name ZERO"))
332 .put(Keys.VFM_NAME2, cleanSeparators(vfModuleName2 , "VF instance name"))
333 .put(Keys.VG_NAME, cleanSeparators(vfModuleName2 , "VF instance name") + "_vol_abc")
334 .put(Keys.VNF_NAME2, cleanSeparators(vnfName2, vnfInstanceName2))
336 registerExpectationFromPresets(ImmutableList.of(
337 // although "some legacy region" is provided for vnf, Service's region "hvf6" overrides it
338 PRESET_MTN6_TO_ATT_AIC,
339 new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 0, request1),
340 new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 1, request2)
341 ), SimulatorApi.RegistrationStrategy.APPEND);
343 deployAndVerifyModuleInPendingTableMacro(serviceInstanceName, request1, request2);
344 verifyOpenAuditInfo(serviceInstanceName);
345 verifyOpenViewEdit(serviceInstanceName);
346 verifyDeleteJob(serviceInstanceName);
347 verifyHideJob(serviceInstanceName);
351 @Test(groups = "partialGroup_5")
352 @FeatureTogglingTest(FLAG_1908_INFRASTRUCTURE_VPN)
353 public void createNewServiceInstance_infraStructureVpn() {
354 String requestId = uuid();
355 String instanceId = uuid();
357 prepareServicePreset(infrastructureVpnService, false);
359 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
360 PRESET_MTN6_TO_ATT_AIC,
361 new PresetAAIGetL3NetworksByCloudRegionSpecificState("irma-aic", "hvf6", "bae71557c5bb4d5aac6743a4e5f1d054"),
362 new PresetAAIGetVpnsByType()
365 ServiceData serviceData = new ServiceData(
366 infrastructureVpnService.modelVersionId,
368 IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY, true, true, false,
370 null, 0, null, new ArrayList<>(), null, false);
371 final String serviceInstanceName = createMacroService(serviceData, false);
373 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
374 PresetMsoCreateMacroCommonPre1806.ofServiceWithVRF(requestId, instanceId, serviceInstanceName),
375 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
378 // Wizard pages of Network and VPN
379 Click.byTestIdOnceItsAvailable("10a74149-c9d7-4918-bbcf-d5fb9b1799ce", 20);
380 clickToCloseModal("setMembersBtn");
382 Click.byTestIdOnceItsAvailable("120d39fb-3627-473d-913c-d228dd0f8e5b", 20);
383 clickToCloseModal("setMembersBtn");
385 assertEquals(Get.byTestId("node-type-indicator").getText(),"VRF");
387 drawingBoardPage.deploy();
388 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "Service "+serviceInstanceName);
391 @Test(groups = "partialGroup_5")
392 @FeatureTogglingTest(FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI)
393 public void createNewServiceInstance_collectionResource() {
394 prepareServicePreset(collectionResourceService, false);
395 String requestId = uuid();
396 String instanceId = uuid();
398 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
399 PRESET_MTN6_TO_ATT_AIC,
400 PresetMsoCreateMacroCommonPre1806.ofCollectionResource(requestId, instanceId),
401 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
404 ServiceData serviceData = new ServiceData(
405 collectionResourceService.modelVersionId,
407 IS_GENERATED_NAMING.TRUE, true, true, false,
409 null, 0, null, new ArrayList<>(), null, false);
410 createMacroService(serviceData, false, randomAlphabetic(5), true, 1);
412 drawingBoardPage.deploy();
413 drawingBoardPage.verifyServiceCompletedOnTime("CR_sanity", "service with collection resource");
417 @FeatureTogglingTest(FLAG_1908_TRANSPORT_SERVICE_NEW_INSTANTIATION_UI)
418 public void createNewServiceInstance_transportService() {
419 prepareServicePreset(transportWithPnfsService, false);
420 String requestId = uuid();
421 String instanceId = uuid();
423 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
424 PresetMsoCreateMacroCommonPre1806.ofTransportService(requestId, instanceId),
425 new PresetMSOOrchestrationRequestGet(COMPLETE, requestId)
428 ServiceData serviceData = new ServiceData(
429 transportWithPnfsService.modelVersionId,
431 IS_GENERATED_NAMING.TRUE, true, true, false,
433 null, 0, null, new ArrayList<>(), null, false);
434 createMacroService(serviceData, false, randomAlphabetic(5), false, 1);
436 drawingBoardPage.deploy();
437 drawingBoardPage.verifyServiceCompletedOnTime("AIM Transport SVC_ym161f", "transport service");
441 @FeatureTogglingTest(FLAG_1902_VNF_GROUPING)
442 public void createNewServiceInstance_aLaCarte_VnfGrouping() {
444 String randomAlphabetic = randomAlphabetic(5);
446 ServiceData serviceData = new ServiceData(
447 aLaCarteVnfGroupingService.modelVersionId,
449 IS_GENERATED_NAMING.FALSE, false, true, false,
450 null, null, 0, null, ImmutableList.of(), null, false);
451 prepareServicePreset(aLaCarteVnfGroupingService, false);
453 createALaCarteService(serviceData, randomAlphabetic);
455 // this is the instance-name that createALaCarteService is using
456 String serviceInstanceName = randomAlphabetic + "instancename";
458 final String requestId = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
459 final String serviceInstanceId = "d2391436-8d55-4fde-b4d5-72dd2cf13cgh";
460 final ImmutableMap<Keys, String> names = ImmutableMap.<Keys, String>builder()
461 .put(Keys.SERVICE_NAME, serviceInstanceName)
463 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
464 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, requestId, serviceInstanceId, "us16807000"),
465 new PresetAAIPostNamedQueryForViewEdit(serviceInstanceId, serviceInstanceName, false, false)
466 ), SimulatorApi.RegistrationStrategy.APPEND);
468 drawingBoardPage.deploy();
469 verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(IN_PROGRESS), false, false);
470 verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(COMPLETED), false, true);
471 InstantiationStatusPage.verifyOpenNewViewEdit(serviceInstanceName, serviceInstanceId, aLaCarteVnfGroupingService.modelVersionId, "TYLER SILVIA", "e433710f-9217-458d-a79d-1c7aff376d89", "EDIT");
474 public interface Invoker{
478 private void doReduxStep(Map<String, String> reduxStates, String randomAlphabetic, int startInStep, String reduxForStep, MutableInt currentStep, String mode, Invoker todo) {
482 if (currentStep.getValue() < startInStep) {
483 // skip up to startInStep
485 } else if (currentStep.getValue() == startInStep) {
487 vidBasePage.setReduxState(reduxForStep);
489 vidBasePage.navigateTo("serviceModels.htm#/servicePlanning?serviceModelId=6b528779-44a3-4472-bdff-9cd15ec93450");
490 vidBasePage.goToIframe();
493 reduxStates.put(String.valueOf(currentStep), vidBasePage.getReduxState());
498 // log current redux state, before invocation
499 reduxStates.put(String.valueOf(currentStep), vidBasePage.getReduxState());
500 logger.info("reduxGator runtime reduxState for step {}:\n{}", currentStep, vidBasePage.getReduxState());
506 } catch (AssertionError | Exception e) {
507 throw new AssertionError(String.join("\n",
508 "Current step: " + currentStep,
509 "Random alphabetic: " + randomAlphabetic,
510 "Starting reduxState: " + reduxStates.get(String.valueOf(currentStep)),
511 "Current reduxState: " + vidBasePage.getReduxState()
515 logger.info("Cumulative reduxState: {}", reduxStates);
516 currentStep.increment();
520 //@Step("duplicate vnf")
521 private void duplicateVnf(VnfData vnfData, int count) {
522 hoverAndClickDuplicateButton(extractNodeToEdit(vnfData));
523 vidBasePage.screenshotDeployDialog("duplicateVnf-" + vnfData.vnfName);
524 List<WebElement> options = ((RemoteWebElement)Get.byId("duplicate-select")).findElementsByTagName("option");
525 assertThat(options.stream().map(x -> x.getText()).collect(Collectors.toList()), Matchers.contains("1","2"));
526 SelectOption.byIdAndVisibleText("duplicate-select", String.valueOf(count));
527 Click.byClassAndVisibleText("sdc-button__primary", "DUPLICATE");
530 private String cleanSeparators(String... s) {
531 return String.join("", s).replace(" ", "");
534 //@Step("edit vf module and just set name")
535 private void editVfModuleAndJustSetName(String vfModuleName, String vfModuleUUID) {
536 hoverAndClickEditButton(vfModuleUUID + "-" + vfModuleName);
537 Input.text("VF instance name ZERO", "instanceName");
538 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
541 @Test(groups = "partialGroup_5")
542 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfTrue_vgNameFalse() {
543 ServiceData serviceData = new ServiceData(
544 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
546 IS_GENERATED_NAMING.FALSE, true, false, true,
547 "2017-488_PASQUALE-vPE 0",
548 vfModule0Name, 1, "1", new ArrayList<>(), vfModule0UUID, false);
550 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
552 final String serviceInstanceName = createMacroService(serviceData, true);
553 createVnf(serviceData, true, serviceInstanceName);
554 createVfModule(serviceData, serviceInstanceName, true, false);
558 @Test(groups = "partialGroup_5")
559 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameFalse() {
560 ServiceData serviceData = new ServiceData(
561 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
563 IS_GENERATED_NAMING.FALSE, false, false, false,
564 "2017-488_PASQUALE-vPE 0",
565 vfModule0Name, 1, "1", new ArrayList<>(), vfModule0UUID, false);
567 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
569 final String serviceInstanceName = createMacroService(serviceData, true);
570 createVnf(serviceData, true, serviceInstanceName);
571 createVfModule(serviceData, serviceInstanceName, true, false);
575 @Test(groups = "partialGroup_5")
576 public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameTrue() throws Exception {
577 ServiceData serviceData = new ServiceData(
578 macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
580 IS_GENERATED_NAMING.FALSE, false, true, false,
581 "2017-488_PASQUALE-vPE 0",
582 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
583 NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5", false);
585 prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
587 final String serviceInstanceName = createMacroService(serviceData, true);
588 createVnf(serviceData, true, serviceInstanceName);
589 clickRemoveVfModule(vfModule0UUID, vfModule0Name);
590 createVfModule(serviceData, serviceInstanceName, false, true);
595 @FeatureTogglingTest(FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI)
596 public void createNewServiceInstance_aLaCarte_WithVnf() {
597 final ModelInfo serviceModelInfo = ModelInfo.aLaCarteServiceCreationNewUI;
598 String serviceInstanceName = "ALaCarteWithVnf"+randomAlphabetic(5);
599 String vnfInstanceName= "VnfForALaCarte"+randomAlphabetic(5);
600 VnfData vnfData = new VnfData("vOCG_1804_VF 0", "aca3f7b1-15f9-45a5-b182-b8b5aca84a76", vnfInstanceName, true);
601 VfData vfmData = new VfData("vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0", false, 1, "1", emptyList(), "815db6e5-bdfd-4cb6-9575-82c36df8747a", null);
602 ServiceData serviceData = new ServiceData(IS_GENERATED_NAMING.TRUE, vnfData, vfmData, true);
604 resetGetServicesCache();
606 prepareServicePreset(serviceModelInfo, true);
608 String requestorID = getUserCredentials().getUserId();
610 String serviceRequestId = uuid();
611 String serviceInstanceId = uuid();
612 String vnfRequestId = uuid();
613 String vnfInstanceId = uuid();
614 String vfm0RequestId = uuid();
615 String vfm0InstanceId = uuid();
616 String vg1RequestId = uuid();
617 String vg1InstanceId = uuid();
618 String vfm1RequestId = uuid();
619 String vfm1InstanceId = uuid();
620 String vfm12RequestId = uuid();
621 String vfm12InstanceId = uuid();
623 ModelInfoWithCustomization vfm0 = new ModelInfoWithCustomization(
624 "815db6e5-bdfd-4cb6-9575-82c36df8747a",
625 "e9c795c8-6b98-4db3-bd90-a84b8ca5181b",
626 "Vocg1804Vf..base_ocg..module-0",
629 "Vocg1804Vf..base_ocg..module-0",
630 "a7b333d7-7633-4197-b40d-80fcfcadee94");
632 ModelInfoWithCustomization vg1 = new ModelInfoWithCustomization(
633 "9c219e70-1177-494b-8977-1395c9f9168c",
634 "0ad14d60-98b6-4575-a9b8-458a796c3f98",
635 "Vocg1804Vf..ocgmgr..module-1",
638 "Vocg1804Vf..ocgmgr..module-1",
639 "f332f3ce-434d-4084-a1e7-5261c16d4940"
642 ModelInfoWithCustomization vfm1 = new ModelInfoWithCustomization(
643 "9c219e70-1177-494b-8977-1395c9f9168c",
644 "0ad14d60-98b6-4575-a9b8-458a796c3f98",
645 "Vocg1804Vf..ocgmgr..module-1",
648 "Vocg1804Vf..ocgmgr..module-1",
649 "f332f3ce-434d-4084-a1e7-5261c16d4940"
652 ModelInfoWithCustomization vfm12 = new ModelInfoWithCustomization(
653 "b601eef4-62fd-4201-a788-ae30e06a1aec",
654 "e3cb8b85-7a3c-4897-b20b-70640c26d671",
655 "Vocg1804Vf..ocgapp_001..module-12",
658 "Vocg1804Vf..ocgapp_001..module-12",
659 "fcc82961-865e-4d38-9c7a-207c511405b6"
662 final String vgName = "vg_for_module1";
664 String vgRelatedInstance = ",{\"relatedInstance\": {"
665 + " \"modelInfo\": {"
666 + " \"modelType\": \"volumeGroup\""
668 + " \"instanceId\": \""+vg1InstanceId+"\","
669 + " \"instanceName\": \""+vgName+"\""
672 String vnfLcpCloudRegionId = "some legacy region";
673 String vnfTenantId = "092eb9e8e4b7412e8787dd091bc58e86";
675 String vfmoduleLcpCloudRegionId;
676 String vfmoduleTenantId;
678 if (FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive()) {
679 vfmoduleLcpCloudRegionId = vnfLcpCloudRegionId;
680 vfmoduleTenantId = vnfTenantId;
682 vfmoduleLcpCloudRegionId = "hvf6";
683 vfmoduleTenantId = "bae71557c5bb4d5aac6743a4e5f1d054";
686 registerExpectationFromPresets(
688 new PresetMSOCreateServiceInstanceAlacarte(
689 ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
690 serviceRequestId, serviceInstanceId,
691 requestorID, serviceModelInfo),
692 PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
693 new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
694 new PresetMSOCreateVnfALaCarteE2E(vnfRequestId, serviceInstanceId, vnfInstanceId, "ONAP", requestorID, vnfLcpCloudRegionId, vnfTenantId, serviceModelInfo),
695 new PresetMSOOrchestrationRequestGet(COMPLETE, vnfRequestId),
696 PRESET_MTN6_TO_ATT_AIC,
697 new PresetMSOCreateVfModuleALaCarteE2E(vfm0RequestId, vfm0InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm0, null, vfmoduleLcpCloudRegionId, vfmoduleTenantId),
698 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm0RequestId),
699 new PresetMSOCreateVfModuleALaCarteE2E(vg1RequestId, vg1InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, vgName, vg1, null, vfmoduleLcpCloudRegionId, vfmoduleTenantId),
700 new PresetMSOOrchestrationRequestGet(COMPLETE, vg1RequestId),
701 new PresetMSOCreateVfModuleALaCarteE2E(vfm1RequestId, vfm1InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm1, vgRelatedInstance, vfmoduleLcpCloudRegionId, vfmoduleTenantId),
702 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm1RequestId),
703 new PresetMSOCreateVfModuleALaCarteE2E(vfm12RequestId, vfm12InstanceId, serviceInstanceId, vnfInstanceId, requestorID, serviceModelInfo, null, vfm12, null, vfmoduleLcpCloudRegionId, vfmoduleTenantId),
704 new PresetMSOOrchestrationRequestGet(COMPLETE, vfm12RequestId)
709 loadServicePopup(serviceModelInfo.modelVersionId);
710 fillALaCarteServicePopup(serviceInstanceName);
712 createVnf(vnfData, false, serviceInstanceName);
713 createVfModule(serviceData, serviceInstanceName, true, false);
714 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);
715 createVfModule(serviceData, serviceInstanceName, false, false);
716 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);
717 createVfModule(serviceData, serviceInstanceName, false, false);
718 drawingBoardPage.deploy();
719 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "service "+serviceInstanceName);
723 @FeatureTogglingTest(FLAG_5G_IN_NEW_INSTANTIATION_UI)
724 public void createNewServiceInstance_aLaCarte_withNetwork_validPopupDataAndUI() {
725 String serviceInstanceName = "NcService"+randomAlphabetic(5);
726 String networkInstanceName= "NcNetowrk"+randomAlphabetic(5);
727 String defactoNetworkInstanceName = "ExtVL"+networkInstanceName;
729 prepareServicePreset(aLaCarteNetworkProvider5G, true);
730 String serviceRequestId = uuid();
731 String networkRequestId = uuid();
732 String requestorID = getUserCredentials().getUserId();
733 registerExpectationFromPresets(
735 new PresetMSOCreateServiceInstanceAlacarte(
736 ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
737 serviceRequestId, DEFAULT_SERVICE_INSTANCE_ID,
738 requestorID, aLaCarteNetworkProvider5G),
739 new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
740 PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
741 new PresetMSOCreateNetworkALaCarte5G(networkRequestId, DEFAULT_SERVICE_INSTANCE_ID, defactoNetworkInstanceName, requestorID),
742 new PresetMSOOrchestrationRequestGet(COMPLETE, networkRequestId),
743 new PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork(
744 new ResponseDetails(serviceInstanceName, serviceRequestId, COMPLETE, "service"),
745 new ResponseDetails(defactoNetworkInstanceName, networkRequestId, COMPLETE, "network"),
746 DEFAULT_SERVICE_INSTANCE_ID)
750 loadServicePopup(aLaCarteNetworkProvider5G.modelVersionId);
751 fillALaCarteServicePopup(serviceInstanceName);
752 VnfData networkData = new VnfData("SR-IOV Provider-1", "840ffc47-e4cf-46de-8e23-525fd8c6fdc3", defactoNetworkInstanceName, false);
753 createNetwork(networkData, false, false, serviceInstanceName);
755 drawingBoardPage.deploy();
756 drawingBoardPage.verifyServiceCompletedOnTime(serviceInstanceName, "service "+serviceInstanceName);
759 private void fillALaCarteServicePopup(String serviceInstanceName) {
760 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
761 WebElement instanceNameInput = Get.byId("instanceName");
762 instanceNameInput.sendKeys(serviceInstanceName);
763 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
764 String serviceType = "TYLER SILVIA";
765 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
766 browseASDCPage.selectServiceTypeByName(serviceType);
767 SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
768 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
769 Click.byTestId("form-set");
770 VidBasePage.goOutFromIframe();
771 browseASDCPage.goToIframe();
774 @Test(groups = "partialGroup_5")
775 public void createNewServiceInstance_macro_validPopupDataAndUI() {
777 List<String> serviceDynamicFields = Arrays.asList("2017488 pasqualevpe0 asn:");
778 ServiceData serviceData = new ServiceData(
779 macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails.modelVersionId,
780 serviceDynamicFields,
781 IS_GENERATED_NAMING.TRUE, true, true, false,
782 "2017-488_PASQUALE-vPE 0",
783 "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", 0,
784 NO_MAX_INSTANCES_IN_MODEL, new ArrayList<>(),
785 "25284168-24bb-4698-8cb4-3f509146eca5", false);
787 prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
789 final String serviceInstanceName = createMacroService(serviceData, true);
790 createVnf(serviceData, true, serviceInstanceName);
791 clickRemoveVfModule(vfModule0UUID, vfModule0Name);
792 createVfModule(serviceData, serviceInstanceName, false, false);
796 //@Step("deploy and verify module in pending table")
797 private void deployAndVerifyModuleInPendingTableMacro(String serviceInstanceName, String requestId1, String requestId2) {
798 drawingBoardPage.deploy();
800 boolean simulatorUpdated = false;
802 int[] ids = {0, 0, 1, 2};
803 String[] statuses = {IN_PROGRESS, COMPLETED, IN_PROGRESS, PENDING};
804 for (int i = 0; i < ids.length; i++) {
805 String actualInstanceName = getActualInstanceName(serviceInstanceName, ids[i]);
806 verifyModuleInPendingTable(actualInstanceName, requestId1, requestId2, ImmutableSet.of(statuses[i]), true, simulatorUpdated);
807 simulatorUpdated = true;
809 vidBasePage.screenshotDeployDialog(serviceInstanceName);
812 private void verifyModuleInPendingTable(String serviceInstanceName, String requestId1, String requestId2, Set<String> expectedStatuses, boolean isMacro, boolean simulatorUpdated) {
813 DrawingBoardPage.ServiceStatusChecker serviceStatusChecker = new DrawingBoardPage.ServiceStatusChecker(serviceInstanceName, expectedStatuses);
814 boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2);
815 final String assertionMessage = String.format("service %s: none of rowClasses [%s] is in expectedStatuses: [%s] ",
817 String.join(",", serviceStatusChecker.getColumnClassesSet()),
818 String.join(",", expectedStatuses));
820 assertTrue(assertionMessage, statusIsShown);
823 InstantiationStatusPage.assertInstantiationStatusRow(
824 serviceInstanceName, expectedRowFields(serviceInstanceName));
826 InstantiationStatusPage.assertInstantiationStatusRow(
827 serviceInstanceName, expectedALaCarteRowFields(serviceInstanceName));
830 if (!simulatorUpdated) {
831 if (requestId2 != null) {
832 registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet(IN_PROGRESS, requestId2), APPEND);
834 registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("COMPLETE", requestId1), APPEND);
836 vidBasePage.screenshotDeployDialog(serviceInstanceName);
839 private String getActualInstanceName(String serviceInstanceName, Integer i) {
840 return i==0 ? serviceInstanceName : serviceInstanceName + "_00" + i;
843 //@Step("verify open view edit")
844 private void verifyOpenViewEdit(String serviceInstanceName) {
845 boolean[] openEnabled = {true, false, false};
846 ImmutableList.of(0, 1, 2).forEach(i -> {
847 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
848 if (Features.FLAG_1902_NEW_VIEW_EDIT.isActive() || FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT.isActive()) {
849 InstantiationStatusPage.verifyOpenNewViewEdit(actualInstanceName, openEnabled[i], "EDIT");
852 vidBasePage.verifyOpenOldViewEdit(actualInstanceName, null, openEnabled[i], true, true);
857 //@Step("verify open audit info")
858 private void verifyOpenAuditInfo(String serviceInstanceName) {
859 boolean auditInfoEnabled = true;
860 String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
861 for (Integer i : ImmutableList.of(0, 1, 2)) {
862 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
863 InstantiationStatusPage.checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM, auditInfoEnabled, contextMenuOpen -> {
864 Click.byTestId(contextMenuOpen);
865 checkAuditInfoModal(actualInstanceName, i, statuses);
867 final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName);
868 row.findElement(By.id(Constants.InstantiationStatus.TD_JOB_STATUS_ICON + "-" + (i))).click();
869 checkAuditInfoModal(actualInstanceName, i, statuses);
873 private void checkAuditInfoModal(String actualInstanceName, Integer i, String[] statuses) {
875 Wait.waitByTestId("vidJobStatus", 10);
877 WebElement webElement = Get.byTestId("model-item-value-serviceInstanceName");
878 assertEquals(webElement.getText(), actualInstanceName, "Service Instance Name must be equal");
880 WebElement vidTableElement = Get.byId("service-instantiation-audit-info-vid");
881 assertEquals(3, vidTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "VID table must contain 3 columns");
883 List<WebElement> vidStatusesElements = vidTableElement.findElements(By.id("vidJobStatus"));
884 List<String> vidStatuses = vidStatusesElements.stream()
886 convertUITextCapitalizeAndFormatPipe(s.getText()))
887 .collect(Collectors.toList());
889 List<String> serviceStatus = Arrays.asList(Arrays.copyOfRange(statuses, i, statuses.length));
890 assertThat("statuses for " + actualInstanceName + " must be as expected", vidStatuses, containsInAnyOrder(serviceStatus.toArray()));
891 String dateString = vidTableElement.findElements(By.id("vidStatusTime")).get(0).getText();
892 assertTrue("vid Status Time column must contains valid date in format : MMM dd, yyyy HH:mm", isDateValid(dateString, "MMM dd, yyyy HH:mm"));
894 WebElement MSOTableElement = Get.byId("service-instantiation-audit-info-mso");
895 assertEquals(3, MSOTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "MSO table must contain 3 columns");
897 if (statuses[i].equals(PENDING)) {
898 assertEquals(0, MSOTableElement.findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(), "When status is PENDING MSO table is empty");
901 vidBasePage.screenshotDeployDialog("audit-info-" + actualInstanceName);
902 Click.byId(Constants.AuditInfoModal.CANCEL_BUTTON);
905 private String convertUITextCapitalizeAndFormatPipe(String text) {
906 return text.toUpperCase().replace("-", "_");
909 private boolean isDateValid(String dateToValidate, String dateFromat) {
911 if (dateToValidate == null) {
914 SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
915 sdf.setLenient(false);
917 //if not valid, it will throw ParseException
918 Date date = sdf.parse(dateToValidate);
920 } catch (ParseException e) {
927 //@Step("verifyDeleteJob")
928 private void verifyDeleteJob(String serviceInstanceName) {
929 boolean[] deleteEnabled = {false, false, true};
930 String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
931 verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE, statuses, deleteEnabled, "deleted");
934 //@Step("verify hide job")
935 private void verifyHideJob(String serviceInstanceName) {
936 boolean[] hideEnabled = {true, false};
937 String[] statuses = {COMPLETED, IN_PROGRESS};
938 verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HIDE, statuses, hideEnabled, "hidden");
941 private void verifyDeleteOrHideOperation(String serviceInstanceName, String contextMenuItem, String[] statuses, boolean[] operationEnabled, String operationName) {
942 for (int i = 0; i < statuses.length; i++) {
943 String actualInstanceName = getActualInstanceName(serviceInstanceName, i);
944 InstantiationStatusPage.checkMenuItem(actualInstanceName, contextMenuItem, operationEnabled[i], contextMenuDelete -> {
945 Click.byTestId(contextMenuDelete);
946 GeneralUIUtils.ultimateWait();
947 assertNull(actualInstanceName + " should be " + operationName,
948 InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName));
951 vidBasePage.screenshotDeployDialog(serviceInstanceName);
954 private ImmutableMap<String, String> expectedRowFields(String actualInstanceName) {
955 return ImmutableMap.<String, String>builder()
956 .put("userId", getUserCredentials().getUserId())
957 .put("serviceModelName", "action-data")
958 .put("serviceInstanceName", actualInstanceName)
959 .put("serviceModelVersion", "1.0")
960 .put("subscriberName", "SILVIA ROBBINS")
961 .put("serviceType", "TYLER SILVIA")
962 .put("regionId", "hvf6")
963 .put("tenantName", "AIN Web Tool-15-D-testalexandria")
964 .put("aicZoneName", "NFTJSSSS-NFT1")
965 .put("project", "WATKINS")
966 .put("owningEntityName", "WayneHolland")
967 .put("pause", "false")
971 private ImmutableMap<String, String> expectedALaCarteRowFields(String actualInstanceName) {
972 return ImmutableMap.<String, String>builder()
973 .put("userId", getUserCredentials().getUserId())
974 .put("serviceModelName", "Grouping Service for Test")
975 .put("serviceInstanceName", actualInstanceName)
976 .put("serviceModelVersion", "1.0")
977 .put("subscriberName", "SILVIA ROBBINS")
978 .put("serviceType", "TYLER SILVIA")
979 .put("project", "WATKINS")
980 .put("owningEntityName", "WayneHolland")
981 .put("pause", "false")
985 //@Step("create sriov service")
986 private String createMacroService(ServiceData serviceData, boolean tryCancelsAndReentries) {
987 return createMacroService(serviceData, tryCancelsAndReentries, randomAlphabetic(5), true, 3);
990 //@Step("create sriov service")
991 private String createMacroService(ServiceData serviceData, boolean tryCancelsAndReentries, String randomAlphabetic, boolean fillLcpRegionAndTenantAndZone, int bulkSize) {
992 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
993 User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
995 // simulate typing with spaces, but expected is without spaces
996 String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
997 String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
999 List<String> cycles = tryCancelsAndReentries ? ImmutableList.of("WILL_CANCEL", "AFTER_CANCEL") : ImmutableList.of("SINGLE_SHOT");
1000 cycles.forEach(cycle -> {
1001 if ("AFTER_CANCEL".equals(cycle)) {
1002 loadServicePopupOnBrowseASDCPage(serviceData.modelUuid);
1004 loadServicePopup(serviceData.modelUuid);
1007 WebElement instanceName = Get.byId("instanceName");
1008 boolean isRequired = isElementByIdRequired("instanceName-label");
1009 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1010 Assert.assertNotNull(instanceName, "instance name input should be visible when serviceEcompNaming == true.");
1011 Assert.assertFalse(isRequired,"instance name input should be optional when ecompNaming == true.");
1013 Assert.assertTrue(isRequired,"instance name input should be required when serviceEcompNaming == false.");
1016 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.FALSE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1017 instanceName.sendKeys(serviceInstanceName);
1019 String setButtonTestId = "form-set";
1021 //serviceType should be dependent on subscriber selection
1022 assertElementDisabled("serviceType-select");
1023 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
1024 GeneralUIUtils.ultimateWait();
1025 Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
1026 if (Features.FLAG_RESTRICTED_SELECT.isActive())
1027 assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
1029 assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
1032 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
1033 //lcpRegion should be dependent on serviceType selection
1034 assertElementDisabled("lcpRegion-select");
1036 String serviceType = "TYLER SILVIA";
1037 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
1038 browseASDCPage.selectServiceTypeByName(serviceType);
1040 String owningEntity = "WayneHolland";
1041 GeneralUIUtils.ultimateWait();
1042 Wait.waitByClassAndText(Constants.CreateNewInstance.OWNING_ENTITY_OPTION, owningEntity, 30);
1043 SelectOption.byTestIdAndVisibleText(owningEntity, (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
1044 assertSetButtonDisabled(setButtonTestId);
1046 SelectOption.byTestIdAndVisibleText("ERICA", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
1047 browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89");
1049 if (fillLcpRegionAndTenantAndZone) {
1051 //we assume that if fillLcpRegionAndTenantAndZone is true tenant and lcpRegion are required for this service model
1052 //If you want to fill lcpRegionAndTenant where they are optional you can refactor this test...
1053 assertSetButtonDisabled(setButtonTestId);
1055 //tenant should be dependent on lcpRegion selection
1056 assertElementDisabled("tenant-select");
1058 String lcpRegion = "hvf6";
1059 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1060 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1062 GeneralUIUtils.ultimateWait();
1063 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1065 browseASDCPage.selectAicZone("NFT1");
1068 assertSetButtonEnabled(setButtonTestId);
1071 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
1073 assertNotificationAreaVisibilityBehaviourAndSetBulkSize(bulkSize);
1076 assertPauseOnPausePointsVisibility(serviceData.multiStageDesign);
1078 validateDynamicFields(serviceData.dynamicFields);
1080 vidBasePage.screenshotDeployDialog("createMacroService-" + serviceInstanceName);
1082 if ("WILL_CANCEL".equals(cycle)) {
1083 Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID);
1085 Click.byTestId(setButtonTestId);
1088 VidBasePage.goOutFromIframe();
1090 browseASDCPage.goToIframe();
1093 return serviceInstanceName;
1096 private String createALaCarteService(ServiceData serviceData, String randomAlphabetic) {
1097 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1098 User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
1100 // simulate typing with spaces, but expected is without spaces
1101 String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
1102 String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
1104 loadServicePopup(serviceData.modelUuid);
1106 WebElement instanceName = Get.byId("instanceName");
1107 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1108 Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true.");
1110 if (serviceData.isGeneratedNaming == IS_GENERATED_NAMING.FALSE || serviceData.isGeneratedNaming == IS_GENERATED_NAMING.TRUE_BUT_GIVE_NAME_EITHER_WAY) {
1111 instanceName.sendKeys(serviceInstanceName);
1114 //serviceType should be dependent on subscriber selection
1115 assertElementDisabled("serviceType-select");
1116 Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
1117 GeneralUIUtils.ultimateWait();
1118 Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
1119 if (Features.FLAG_RESTRICTED_SELECT.isActive())
1120 assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
1122 assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
1125 VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
1127 String serviceType = "TYLER SILVIA";
1128 Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
1129 browseASDCPage.selectServiceTypeByName(serviceType);
1131 String setButtonTestId = "form-set";
1132 assertSetButtonDisabled(setButtonTestId);
1134 SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
1136 SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
1138 validateDynamicFields(serviceData.dynamicFields);
1140 vidBasePage.screenshotDeployDialog("createALaCarteService-" + serviceInstanceName);
1142 Click.byTestId(setButtonTestId);
1144 VidBasePage.goOutFromIframe();
1146 browseASDCPage.goToIframe();
1148 return serviceInstanceName;
1151 private void assertElementExistAccordingTagNameAndTestId(String tag, String testId) {
1152 WebElement webElement = Get.byId(testId);
1153 assertEquals(webElement.getTagName(), tag);
1156 //@Step("create vnf")
1157 private void createVnf(ServiceData serviceData, boolean tryCancelsAndReentries, String serviceInstanceName) {
1158 createVnf(serviceData.vnfData, tryCancelsAndReentries, serviceInstanceName);
1161 private void createNetwork(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName) {
1162 createVnf(vnfData, tryCancelsAndReentries, addedByDefault, serviceInstanceName, true);
1165 private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, String serviceInstanceName) {
1166 createVnf(vnfData, tryCancelsAndReentries, true, serviceInstanceName, false);
1169 private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName, boolean isNetwork) {
1170 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1172 String nodeToEdit = extractNodeToEdit(vnfData);
1173 if (addedByDefault) {
1174 hoverAndClickEditButton(nodeToEdit);
1176 drawingBoardPage.clickAddButtonByNodeName(vnfData.vnfName);
1179 GeneralUIUtils.ultimateWait();
1181 if (vnfData.isGeneratedNaming) {
1182 Assert.assertFalse(isElementByIdRequired("instanceName-label") ,"instance name input should be optional when EcompNaming == true, and required when false.");
1184 Input.text(vnfData.vnfInstanceName, "instanceName");
1188 //tenant should be dependent on lcpRegion selection
1189 assertElementDisabled("tenant-select");
1191 WebElement legacyRegion = Get.byTestId("lcpRegionText");
1192 Assert.assertNull(legacyRegion, "legacy region shouldn't be visible when lcp region isn't AAIAIC25,olson3 or olson5a.");
1194 browseASDCPage.selectLcpRegion("AAIAIC25");
1196 legacyRegion = Get.byTestId("lcpRegionText");
1197 Assert.assertNotNull(legacyRegion, "legacy region should be visible when lcp region is AAIAIC25,olson3 or olson5a.");
1199 browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e86");
1202 assertSetButtonDisabled(VNF_SET_BUTTON_TEST_ID);
1203 SelectOption.selectOptionsFromMultiselectById("multi-selectPlatform", ImmutableList.of("platform"));
1204 SelectOption.selectOptionsFromMultiselectById("multi-lineOfBusiness",ImmutableList.of("ONAP"));
1207 SelectOption.byTestIdAndVisibleText("TYLER SILVIA", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
1208 browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89");
1211 assertSetButtonEnabled(VNF_SET_BUTTON_TEST_ID);
1213 browseASDCPage.setLegacyRegion("some legacy region");
1216 Wait.waitByTestId("model-item-value-subscriberName", 10);
1217 assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1218 if (!vnfData.isGeneratedNaming) {
1219 assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Subscriber name should be shown in vf module");
1222 vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName);
1223 clickToCloseModal(VNF_SET_BUTTON_TEST_ID);
1227 if (tryCancelsAndReentries) {
1228 hoverAndClickEditButton(nodeToEdit);
1230 Wait.byText("TYLER SILVIA");
1231 GeneralUIUtils.ultimateWait();
1232 assertThat(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), startsWith("AAIAIC25"));
1233 assertEquals(Get.selectedOptionText(Constants.ViewEdit.TENANT_SELECT_TESTS_ID), "USP-SIP-IC-24335-T-01");
1234 assertTrue(Get.isOptionSelectedInMultiSelect("multi-lineOfBusiness", "ONAP"));
1236 assertTrue(Get.isOptionSelectedInMultiSelect(Constants.OwningEntity.PLATFORM_MULTI_SELECT_TEST_ID, "platform"));
1238 clickToCloseModal(Constants.CANCEL_BUTTON_TEST_ID);
1240 toggleItemInTree(Constants.DrawingBoard.AVAILABLE_MODELS_TREE);
1242 Click.byTestId("node-" + nodeToEdit);
1245 private String extractNodeToEdit(VnfData vnfData) {
1246 return vnfData.vnfUuid + "-" + vnfData.vnfName;
1250 private void toggleItemInTree(String tree) {
1251 Click.byXpath("//tree-root[@data-tests-id='" + tree + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']");
1254 private void hoverAndClickEditButton(String nodeToEdit) {
1255 hoverAndClickButton(nodeToEdit, Constants.DrawingBoard.CONTEXT_MENU_EDIT);
1258 private void hoverAndClickDeleteButton(String nodeToEdit) {
1259 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE);
1262 private void hoverAndClickDuplicateButton(String nodeToEdit) {
1263 hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_DUPLICATE);
1265 private void hoverAndClickButton(String nodeToEdit, String contextMenuItem) {
1266 String nodeOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit;
1267 String buttonOfEdit = nodeOfEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON;
1268 GeneralUIUtils.hoverOnAreaByTestId(buttonOfEdit);
1269 Click.byTestId(buttonOfEdit);
1270 Click.byTestId(contextMenuItem);
1273 private void uploadSupplementaryFile(String inputFileName, boolean isValid, BrowseASDCPage browseASDCPage, String setButtonTestId) {
1274 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1275 GeneralUIUtils.ultimateWait();
1276 Input.file("supplementaryFiles/" + inputFileName, "supplementaryFile");
1277 GeneralUIUtils.ultimateWait();
1278 WebElement fileName = Get.byTestId("file-name");
1279 assertEquals(fileName.getText(),inputFileName);
1280 browseASDCPage.assertButtonState(setButtonTestId, isValid);
1284 private void deleteSupplementaryFile() {
1285 if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
1286 Click.byTestId("remove-uploaded-file");
1287 GeneralUIUtils.ultimateWait();
1288 WebElement fileName = Get.byTestId("file-name");
1289 assertEquals(fileName.getText(),"Choose file");
1293 //@Step("create vf module")
1294 private void createVfModule(ServiceData serviceData, String serviceInstanceName, boolean addedByDefault, boolean addOpensPopup) {
1295 clickAddVfModule(serviceData, addedByDefault);
1296 if (!addOpensPopup) {
1297 clickEditVfModule(serviceData);
1299 fillAndSetVfModulePopup(serviceData, serviceInstanceName);
1302 private void fillAndSetVfModulePopup(ServiceData serviceData, String serviceInstanceName) {
1303 String setButtonTestId = "form-set";
1304 BrowseASDCPage browseASDCPage = new BrowseASDCPage();
1306 assertEquals(isElementByIdRequired("instanceName-label"), !serviceData.vnfData.isGeneratedNaming,"instance name input should be optional when EcompNaming == true, and required when false.");
1308 if (!serviceData.vnfData.isGeneratedNaming) {
1309 Input.text("VF instance name", "instanceName");
1312 if (!serviceData.vfData.vgEnabled || (!serviceData.isALaCarte && serviceData.vnfData.isGeneratedNaming)) {
1313 Assert.assertNull(Get.byTestId("volumeGroupName"), "volumeGroupName input should be invisible "
1314 + "when vgEnabled is false or when vgEnabled is true and EcompGenName is true "
1315 + "(was: serviceData.vfData.vgEnabled=>" + serviceData.vfData.vgEnabled + ", serviceData.isGeneratedNaming=>" + IS_GENERATED_NAMING.FALSE + ")");
1318 Assert.assertFalse(isElementByIdRequired("volumeGroupName-label"),
1319 "volume Group name input should be always optional");
1320 if (serviceData.vfData.vgName!=null) {
1321 browseASDCPage.setInputText("volumeGroupName", serviceData.vfData.vgName);
1326 Wait.waitByTestId("model-item-value-subscriberName", 10);
1327 assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
1328 assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(serviceData.vfData.vfMin), "Min should be shown");
1329 if (serviceData.vfData.vfMax!=null) {
1330 if (!serviceData.vfData.vfMax.equals(NO_MAX_INSTANCES_IN_MODEL)) {
1331 assertEquals(Get.byTestId("model-item-value-max").getText(), serviceData.vfData.vfMax, "Max should be shown");
1334 String defaultMaxText = Features.FLAG_2002_UNLIMITED_MAX.isActive() ? "Unlimited (default)" : "1";
1335 assertEquals(Get.byTestId("model-item-value-max").getText(), defaultMaxText, "Max should be shown with default value");
1339 if (serviceData.isGeneratedNaming!=IS_GENERATED_NAMING.TRUE) {
1340 Wait.byText(serviceInstanceName);
1341 assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Service name should be shown in vf module");
1344 if (serviceData.isALaCarte && !FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive()) {
1345 String lcpRegion = "hvf6";
1346 Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
1347 viewEditPage.selectLcpRegion(lcpRegion, AIC);
1348 browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
1351 validateDynamicFields(serviceData.vfData.dynamicFields);
1353 uploadSupplementaryFile("invalid-file.json", false, browseASDCPage, setButtonTestId);
1354 deleteSupplementaryFile();
1355 uploadSupplementaryFile("sample.json", true, browseASDCPage, setButtonTestId);
1357 browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName);
1358 clickToCloseModal(setButtonTestId);
1361 private void clickToCloseModal(String setOrCancelButtonTestId) {
1362 Click.byTestId(setOrCancelButtonTestId);
1363 GeneralUIUtils.ultimateWait();
1366 private void clickEditVfModule(ServiceData serviceData) {
1367 hoverAndClickEditButton(serviceData.vfData.uuid + "-" + serviceData.vfData.vfName);
1370 private void clickAddVfModule(ServiceData serviceData, boolean addedByDefault) {
1371 if (addedByDefault) {
1374 System.out.println("VFModule should be added 'manually'");
1376 final WebElement vfModuleNode = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + serviceData.vfData.vfName);
1378 if (vfModuleNode == null || !vfModuleNode.isDisplayed()) {
1380 drawingBoardPage.clickNode(serviceData.vnfData.vnfName);
1382 drawingBoardPage.clickAddButtonByNodeName(serviceData.vfData.vfName);
1385 private void clickRemoveVfModule(String vfModuleId, String vfModuleName) {
1386 System.out.println("will remove " + vfModule0Name);
1387 hoverAndClickDeleteButton(vfModuleId + "-" + vfModuleName);
1390 private void assertPauseOnPausePointsVisibility(boolean visibility) {
1391 WebElement pauseElem = Get.byId("Pause");
1392 final String assertionMessage = "pause on pause points visibility should be " + visibility;
1394 Assert.assertNotNull(pauseElem, assertionMessage);
1396 Assert.assertNull(pauseElem, assertionMessage);
1400 public void validateDynamicFields(List<String> dynamicFields) {
1401 for (String field : dynamicFields) {
1402 WebElement fieldElement = GeneralUIUtils.findByText(field);
1403 assertNotNull("couldn't find dynamic field: " + field, fieldElement);
1407 private void assertNotificationAreaVisibilityBehaviourAndSetBulkSize(int size) {
1408 WebElement webElement = Get.byId("notification-area");
1409 Assert.assertNull(webElement, "notification area should be invisible if only 1 qty.");
1411 SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(size));
1413 webElement = Get.byId("notification-area");
1414 Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty.");
1417 static class ServiceData {
1419 ServiceData(String modelUuid, List<String> dynamicFields, IS_GENERATED_NAMING isServiceGeneratedNaming,
1420 boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName,
1421 String vfName, int vfMin, String vfMax, List<String> vfModuleDynamicFields, String vfVersionId, boolean isALaCarte) {
1422 this.modelUuid = modelUuid;
1423 this.dynamicFields = dynamicFields;
1424 this.isGeneratedNaming = isServiceGeneratedNaming;
1425 this.multiStageDesign = multiStageDesign;
1426 this.isALaCarte = isALaCarte;
1427 this.vnfData = new VnfData(vnfName, "69e09f68-8b63-4cc9-b9ff-860960b5db09", "VNF instance name", isVnfGeneratedNaming);
1428 this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields, vfVersionId, "_abc");
1431 public ServiceData(IS_GENERATED_NAMING isGeneratedNaming, VnfData vnfData, VfData vfData, boolean isALaCarte) {
1432 this.isGeneratedNaming = isGeneratedNaming;
1433 this.vnfData = vnfData;
1434 this.vfData = vfData;
1435 this.isALaCarte = isALaCarte;
1439 List<String> dynamicFields;
1440 IS_GENERATED_NAMING isGeneratedNaming;
1441 boolean multiStageDesign;
1446 enum IS_GENERATED_NAMING { TRUE, FALSE, TRUE_BUT_GIVE_NAME_EITHER_WAY}
1449 private static class VnfData {
1450 VnfData(String vnfName, String vnfUuid, String vnfInstanceName, boolean isGeneratedNaming) {
1451 this.vnfName = vnfName;
1452 this.vnfUuid = vnfUuid;
1453 this.vnfInstanceName = vnfInstanceName;
1454 this.isGeneratedNaming = isGeneratedNaming;
1457 final String vnfName;
1458 final String vnfUuid;
1459 final String vnfInstanceName;
1460 final boolean isGeneratedNaming;
1464 private static class VfData {
1465 VfData(String vfName, boolean vgEnabled, int vfMin, String vfMax, List<String> dynamicFields, String uuid, String vgName) {
1466 this.vfName = vfName;
1467 this.vgEnabled = vgEnabled;
1470 this.dynamicFields = dynamicFields;
1472 this.vgName = vgName;
1478 final String vfName;
1479 final boolean vgEnabled;
1480 final List<String> dynamicFields;
1481 final String vgName;