From e3fd03a98925c66cb6d580be8591602ecceb52f9 Mon Sep 17 00:00:00 2001 From: Eylon Malin Date: Wed, 15 Jan 2020 10:06:18 +0200 Subject: e2e test for instantiation template Issue-ID: VID-724 Change-Id: I7bac1c2789a57698224be7f42329894c5f02b150 Signed-off-by: Eylon Malin --- .../test/test/CreateInstanceDialogBaseTest.java | 25 +--- .../vid/automation/test/test/ModernUITestBase.java | 34 +++++ .../test/test/NewServiceInstanceTest.java | 31 ++--- .../test/test/TemplateInstantiationTest.java | 140 +++++++++++++++++++++ .../vid/automation/test/test/VidBaseTestCase.java | 12 +- 5 files changed, 192 insertions(+), 50 deletions(-) create mode 100644 vid-automation/src/main/java/vid/automation/test/test/ModernUITestBase.java create mode 100644 vid-automation/src/main/java/vid/automation/test/test/TemplateInstantiationTest.java (limited to 'vid-automation/src/main/java/vid/automation/test') diff --git a/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java b/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java index df3b41d06..2a122119d 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java @@ -1,20 +1,17 @@ package vid.automation.test.test; +import java.util.ArrayList; import org.junit.Assert; import org.onap.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.WebElement; import vid.automation.test.Constants; import vid.automation.test.infra.Click; import vid.automation.test.infra.Exists; -import vid.automation.test.infra.Get; import vid.automation.test.infra.SelectOption; import vid.automation.test.model.Service; import vid.automation.test.model.ServiceModel; import vid.automation.test.sections.ViewEditPage; -import java.util.ArrayList; -import java.util.List; - public class CreateInstanceDialogBaseTest extends VidBaseTestCase { protected ViewEditPage viewEditPage= new ViewEditPage(); @@ -147,24 +144,4 @@ public class CreateInstanceDialogBaseTest extends VidBaseTestCase { Assert.assertTrue(field + " " + Constants.REQUIRED, byclassAndText); } - protected void cancelPopup() { - viewEditPage.clickCancelButtonByTestID(); - GeneralUIUtils.ultimateWait(); - } - - - - public static void AssertUnselectedOptionInMultiselectById(String multiSelectId, String unselectedOption){ - Click.byId(multiSelectId); - WebElement element = Get.byClassAndText(Constants.MULTI_SELECT_UNSELECTED_CLASS, unselectedOption); - Assert.assertTrue("The option "+ unselectedOption +" is already selected",element != null); - Click.byId(multiSelectId); - } - - public void validateDynamicFields(List dynamicFields) { - for (String field : dynamicFields) { - WebElement fieldElement = GeneralUIUtils.findByText(field); - Assert.assertNotNull("couldn't find dynamic field: " + field, fieldElement); - } - } } diff --git a/vid-automation/src/main/java/vid/automation/test/test/ModernUITestBase.java b/vid-automation/src/main/java/vid/automation/test/test/ModernUITestBase.java new file mode 100644 index 000000000..dd6a0f6b8 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/ModernUITestBase.java @@ -0,0 +1,34 @@ +package vid.automation.test.test; + +import static vid.automation.test.infra.ModelInfo.pasqualeVmxVpeBvService488Annotations; + +import com.google.common.collect.ImmutableList; +import java.util.UUID; +import org.jetbrains.annotations.NotNull; +import vid.automation.test.infra.ModelInfo; +import vid.automation.test.sections.ViewEditPage; + +public class ModernUITestBase extends VidBaseTestCase { + + protected ViewEditPage viewEditPage = new ViewEditPage(); + + protected void prepareServicePreset(ModelInfo modelInfo, boolean deploy) { + String subscriberId = "e433710f-9217-458d-a79d-1c7aff376d89"; + + if (deploy) { + registerExpectationForServiceDeployment( + ImmutableList.of( + modelInfo, + pasqualeVmxVpeBvService488Annotations + ), + subscriberId, null); + } else { + registerExpectationForServiceBrowseAndDesign(ImmutableList.of(modelInfo), subscriberId); + } + } + + @NotNull + protected String uuid() { + return UUID.randomUUID().toString(); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java index 68a3cdefe..eb3406f5f 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java @@ -11,6 +11,7 @@ import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOw import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE; import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID; import static org.testng.Assert.assertEquals; +import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; import static vid.automation.test.infra.Features.FLAG_1902_VNF_GROUPING; import static vid.automation.test.infra.Features.FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI; @@ -28,7 +29,6 @@ import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcomp import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse; import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse; import static vid.automation.test.infra.ModelInfo.macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails; -import static vid.automation.test.infra.ModelInfo.pasqualeVmxVpeBvService488Annotations; import static vid.automation.test.infra.ModelInfo.transportWithPnfsService; import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset; @@ -48,13 +48,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.UUID; import java.util.stream.Collectors; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hamcrest.Matchers; -import org.jetbrains.annotations.NotNull; import org.onap.sdc.ci.tests.datatypes.UserCredentials; import org.onap.sdc.ci.tests.utilities.GeneralUIUtils; import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetL3NetworksByCloudRegionSpecificState; @@ -106,7 +104,7 @@ import vid.automation.test.test.NewServiceInstanceTest.ServiceData.IS_GENERATED_ import vid.automation.test.utils.ReadFile; @FeatureTogglingTest(FLAG_ENABLE_WEBPACK_MODERN_UI) -public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { +public class NewServiceInstanceTest extends ModernUITestBase { public static final String COMPLETED = "COMPLETED"; private static final String IN_PROGRESS = "IN_PROGRESS"; @@ -1384,12 +1382,13 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { } } - @NotNull - private String uuid() { - return UUID.randomUUID().toString(); + public void validateDynamicFields(List dynamicFields) { + for (String field : dynamicFields) { + WebElement fieldElement = GeneralUIUtils.findByText(field); + assertNotNull("couldn't find dynamic field: " + field, fieldElement); + } } - private void assertNotificationAreaVisibilityBehaviourAndSetBulkSize(int size) { WebElement webElement = Get.byId("notification-area"); Assert.assertNull(webElement, "notification area should be invisible if only 1 qty."); @@ -1400,22 +1399,6 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty."); } - //@Step("prepare service preset") - private void prepareServicePreset(ModelInfo modelInfo, boolean deploy) { - String subscriberId = "e433710f-9217-458d-a79d-1c7aff376d89"; - - if (deploy) { - registerExpectationForServiceDeployment( - ImmutableList.of( - modelInfo, - pasqualeVmxVpeBvService488Annotations - ), - subscriberId, null); - } else { - registerExpectationForServiceBrowseAndDesign(ImmutableList.of(modelInfo), subscriberId); - } - } - static class ServiceData { ServiceData(String modelUuid, List dynamicFields, IS_GENERATED_NAMING isServiceGeneratedNaming, diff --git a/vid-automation/src/main/java/vid/automation/test/test/TemplateInstantiationTest.java b/vid-automation/src/main/java/vid/automation/test/test/TemplateInstantiationTest.java new file mode 100644 index 000000000..a540bf0be --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/TemplateInstantiationTest.java @@ -0,0 +1,140 @@ +package vid.automation.test.test; + +import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC; +import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE; +import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME; +import static org.onap.vid.api.TestUtils.generateRandomAlphaNumeric; +import static vid.automation.test.Constants.BrowseASDC.NewServicePopup.SET_BUTTON; +import static vid.automation.test.Constants.DrawingBoard.CONTEXT_MENU_BUTTON_HEADER; +import static vid.automation.test.Constants.DrawingBoard.CONTEXT_MENU_HEADER_EDIT_ITEM; +import static vid.automation.test.Constants.DrawingBoard.DEPLOY_BUTTON; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET; +import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import java.util.List; +import org.onap.sdc.ci.tests.datatypes.UserCredentials; +import org.onap.sdc.ci.tests.utilities.GeneralUIUtils; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceAlacarte; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys; +import org.onap.vid.api.AsyncInstantiationBase; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.Input; +import vid.automation.test.infra.ModelInfo; +import vid.automation.test.sections.DrawingBoardPage; +import vid.automation.test.sections.SideMenu; +import vid.automation.test.sections.VidBasePage; +import vid.automation.test.services.AsyncJobsService; + +public class TemplateInstantiationTest extends ModernUITestBase { + + private AsyncInstantiationBase asyncInstantiationBase; + + @BeforeClass + protected void setUp() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.dropAllAsyncJobs(); + asyncInstantiationBase = new AsyncInstantiationBase(); + asyncInstantiationBase.init(); + UserCredentials userCredentials = getUserCredentials(); + //login for API test (needed besides selenium test via browser) + asyncInstantiationBase.login(userCredentials); + } + + @AfterClass + protected void tearDown() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.muteAllAsyncJobs(); + } + + /* + In this test we create an simple aLaCarte service via api, + Then browse SDC -> search for same model uuid -> deploy -> + template popup is opened -> select the service -> click load template -> + drawing board is opened -> edit service instance name -> deploy -> + instantiation status is opened -> wait for service to completed. + */ + @Test + public void instantiateALaCarteServiceFromTemplateTest() { + + final ModelInfo modelInfo = ModelInfo.aLaCarteServiceCreationNewUI; + String templateInstanceName = "template"+generateRandomAlphaNumeric(10); + String requestorID = getUserCredentials().getUserId(); + String serviceRequestId = uuid(); + String serviceInstanceId = uuid(); + + //prepare presets for first instantiation (template), and rest of scenario till deploy + prepareServicePreset(modelInfo, true); + registerExpectationFromPresets( + ImmutableList.of( + new PresetMSOCreateServiceInstanceAlacarte( + ImmutableMap.of(Keys.SERVICE_NAME, templateInstanceName), + serviceRequestId, serviceInstanceId, + requestorID, modelInfo), + PRESET_SOME_LEGACY_REGION_TO_ATT_AIC, + new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId) + ), + APPEND + ); + + //create service instance via API + final List jobsIds = asyncInstantiationBase.createBulkOfInstances(false, 1, + ImmutableMap.of(SERVICE_NAME, templateInstanceName), "asyncInstantiation/vidRequestCreateALaCarteForTemplate.json"); + asyncInstantiationBase.waitForJobsToSuccessfullyCompleted(1, jobsIds); + + String newInstanceName = "template"+generateRandomAlphaNumeric(10); + String serviceRequestId2 = uuid(); + String serviceInstanceId2 = uuid(); + + //load template and and edit service instance name + browseSdcAndClickDeploy(modelInfo); + selectTemplateByNameAndLoadTemplate(templateInstanceName); + VidBasePage.goToIframe(); + editServiceInstanceName(newInstanceName); + + //prepare presets for second service instance deploy + registerExpectationFromPresets( + ImmutableList.of( + new PresetMSOCreateServiceInstanceAlacarte( + ImmutableMap.of(Keys.SERVICE_NAME, newInstanceName), + serviceRequestId2, serviceInstanceId2, + requestorID, modelInfo), + PRESET_SOME_LEGACY_REGION_TO_ATT_AIC, + new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId2) + ), + CLEAR_THEN_SET + ); + + //deploy the service and wait for completion + Click.byTestId(DEPLOY_BUTTON); + VidBasePage.goToIframe(); + new DrawingBoardPage().verifyServiceCompletedOnTime(newInstanceName, "service deployed from template"); + } + + private void browseSdcAndClickDeploy(ModelInfo modelInfo) { + SideMenu.navigateToBrowseASDCPage(); + GeneralUIUtils.ultimateWait(); + loadTemplatesPopupOnBrowseASDCPage(modelInfo.modelVersionId); + } + + private void selectTemplateByNameAndLoadTemplate(String templateInstanceName) { + Click.byText(templateInstanceName); + Click.byTestId("LoadTemplateButton"); + } + + private void editServiceInstanceName(String newInstanceName) { + GeneralUIUtils.getClickableButtonBy(Get.getXpathForDataTestId(CONTEXT_MENU_BUTTON_HEADER), 60).click(); + Click.byTestId(CONTEXT_MENU_HEADER_EDIT_ITEM); + GeneralUIUtils.ultimateWait(); + Input.replaceText(newInstanceName, "instanceName"); + Click.byTestId(SET_BUTTON); + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java index c2733f0fb..fd3dd47a6 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java +++ b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java @@ -523,13 +523,21 @@ public class VidBaseTestCase extends SetupCDTest{ loadServicePopupOnBrowseASDCPage(modelVersionId); } - protected void loadServicePopupOnBrowseASDCPage(String modelVersionId ) { + protected void loadServicePopupOnBrowseASDCPage(String modelVersionId) { + loadServicePopupOnBrowseASDCPage(modelVersionId, "Model version"); + } + + protected void loadTemplatesPopupOnBrowseASDCPage (String modelVersionId) { + loadServicePopupOnBrowseASDCPage(modelVersionId, "Templates"); + } + + protected void loadServicePopupOnBrowseASDCPage(String modelVersionId, String expectedText) { DeployModernUIMacroDialog deployMacroDialog = new DeployModernUIMacroDialog(); VidBasePage.goOutFromIframe(); deployMacroDialog.clickDeployServiceButtonByServiceUUID(modelVersionId); deployMacroDialog.goToIframe(); GeneralUIUtils.ultimateWait(); - Wait.byText("Model version"); + Wait.byText(expectedText); } public void assertSetButtonDisabled(String buttonTestId) { -- cgit 1.2.3-korg