Add ETSI VNF/CNF distribution flow 13/120113/3
authoraribeiro <anderson.ribeiro@est.tech>
Wed, 24 Mar 2021 11:20:49 +0000 (11:20 +0000)
committeraribeiro <anderson.ribeiro@est.tech>
Tue, 6 Apr 2021 09:39:09 +0000 (10:39 +0100)
Issue-ID: SDC-3538
Signed-off-by: aribeiro <anderson.ribeiro@est.tech>
Signed-off-by: André Schmid <andre.schmid@est.tech>
Change-Id: I34198e25919c77903300ef4e3cac04f52b844f93

16 files changed:
integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/data/providers/OnboardingDataProviders.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/datatypes/ComponentData.java [new file with mode: 0644]
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/EtsiOnboardVnfCnfUiTests.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/flow/AddNodeToCompositionFlow.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/flow/CreateResourceFromVspFlow.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/flow/CreateVlmFlow.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/flow/CreateVspFlow.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/flow/DownloadToscaCsarFlow.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/flow/ImportVspFlow.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ComponentCertificationModal.java [new file with mode: 0644]
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ComponentPage.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ResourceCreatePage.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ResourceWorkspaceTopBarComponent.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ServiceCreatePage.java
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/TopNavComponent.java

index 7f8c018..5e2a8e9 100644 (file)
@@ -115,7 +115,7 @@ public final class OnboardingDataProviders {
         return parametersArray;
     }
 
-    @DataProvider(name = "etsiVnfCnfOnboardPackages", parallel = true)
+    @DataProvider(name = "etsiVnfCnfOnboardPackages")
     private static Object[][] etsiVnf() {
         final List<String> vnfPackageFileNameList = OnboardingUtils.getXnfNamesFileList(XnfTypeEnum.ETSI);
         if (CollectionUtils.isEmpty(vnfPackageFileNameList)) {
diff --git a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/datatypes/ComponentData.java b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/datatypes/ComponentData.java
new file mode 100644 (file)
index 0000000..6ab8518
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.frontend.ci.tests.datatypes;
+
+import lombok.Data;
+import org.onap.sdc.backend.ci.tests.datatypes.enums.ComponentType;
+
+/**
+ * Holds information about a SDC component (Service, VF, VFC, etc.).
+ */
+@Data
+public class ComponentData {
+
+    private String name;
+    private String version;
+    private ComponentType componentType;
+
+}
index dfe6679..40716bf 100644 (file)
@@ -24,18 +24,23 @@ import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.fail;
 
-import com.aventstack.extentreports.ExtentTest;
 import com.aventstack.extentreports.Status;
 import java.util.Map;
 import java.util.Optional;
 import org.junit.jupiter.api.Assertions;
 import org.onap.sdc.backend.ci.tests.data.providers.OnboardingDataProviders;
-import org.onap.sdc.backend.ci.tests.datatypes.enums.UserRoleEnum;
+import org.onap.sdc.backend.ci.tests.datatypes.enums.ComponentType;
+import org.onap.sdc.backend.ci.tests.datatypes.enums.ServiceCategoriesEnum;
 import org.onap.sdc.backend.ci.tests.utils.general.ElementFactory;
+import org.onap.sdc.frontend.ci.tests.datatypes.ComponentData;
+import org.onap.sdc.frontend.ci.tests.datatypes.ServiceCreateData;
 import org.onap.sdc.frontend.ci.tests.exception.UnzipException;
 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
+import org.onap.sdc.frontend.ci.tests.execute.setup.ExtentTestActions;
 import org.onap.sdc.frontend.ci.tests.execute.setup.SetupCDTest;
+import org.onap.sdc.frontend.ci.tests.flow.AddNodeToCompositionFlow;
 import org.onap.sdc.frontend.ci.tests.flow.CreateResourceFromVspFlow;
+import org.onap.sdc.frontend.ci.tests.flow.CreateServiceFlow;
 import org.onap.sdc.frontend.ci.tests.flow.CreateVlmFlow;
 import org.onap.sdc.frontend.ci.tests.flow.CreateVspFlow;
 import org.onap.sdc.frontend.ci.tests.flow.DownloadToscaCsarFlow;
@@ -43,10 +48,11 @@ import org.onap.sdc.frontend.ci.tests.flow.ImportVspFlow;
 import org.onap.sdc.frontend.ci.tests.flow.exception.UiTestFlowRuntimeException;
 import org.onap.sdc.frontend.ci.tests.pages.ComponentPage;
 import org.onap.sdc.frontend.ci.tests.pages.ResourceCreatePage;
-import org.onap.sdc.frontend.ci.tests.pages.ResourceLeftSideMenu;
-import org.onap.sdc.frontend.ci.tests.pages.ResourceWorkspaceTopBarComponent;
+import org.onap.sdc.frontend.ci.tests.pages.ServiceCreatePage;
 import org.onap.sdc.frontend.ci.tests.pages.TopNavComponent;
+import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.ToscaArtifactsPage;
+import org.onap.sdc.frontend.ci.tests.pages.home.HomePage;
 import org.onap.sdc.frontend.ci.tests.utilities.FileHandling;
 import org.openqa.selenium.WebDriver;
 import org.slf4j.Logger;
@@ -60,6 +66,7 @@ public class EtsiOnboardVnfCnfUiTests extends SetupCDTest {
 
     private WebDriver webDriver;
     private TopNavComponent topNavComponent;
+    private HomePage homePage;
 
     @BeforeMethod
     public void init() {
@@ -69,8 +76,6 @@ public class EtsiOnboardVnfCnfUiTests extends SetupCDTest {
 
     @Test
     public void createVlm() {
-        final ExtentTest extendTest = getExtendTest();
-        extendTest.log(Status.INFO, String.format("Starting flow to create a VLM"));
         final CreateVlmFlow createVlmFlow = new CreateVlmFlow(webDriver);
         createVlmFlow.run();
     }
@@ -80,6 +85,7 @@ public class EtsiOnboardVnfCnfUiTests extends SetupCDTest {
         setLog(vnfFile);
         final String resourceName = ElementFactory.addRandomSuffixToName(ElementFactory.getResourcePrefix());
         runOnboardEtsiVnfCnf(resourceName, rootFolder, vnfFile);
+        runDistribution(resourceName);
     }
 
     /**
@@ -89,54 +95,93 @@ public class EtsiOnboardVnfCnfUiTests extends SetupCDTest {
      * @param rootFolder VNF/CNF package location
      * @param vnfCnfFile file to be onboarded
      */
-    public void runOnboardEtsiVnfCnf(final String resourceName, final String rootFolder, final String vnfCnfFile) {
-        final ExtentTest extendTest = getExtendTest();
-        extendTest.log(Status.INFO,
-            String.format("Creating VSP '%s' by onboarding ETSI VNF/CNF package '%s'", resourceName, vnfCnfFile));
+    private void runOnboardEtsiVnfCnf(final String resourceName, final String rootFolder, final String vnfCnfFile) {
         final CreateVspFlow createVspFlow = new CreateVspFlow(webDriver, resourceName, vnfCnfFile, rootFolder);
         createVspFlow.run(topNavComponent);
-
-        extendTest.log(Status.INFO, String.format("Importing VSP '%s'", resourceName));
         final ImportVspFlow importVspFlow = new ImportVspFlow(webDriver, resourceName);
-
-        extendTest.log(Status.INFO, "Creating ResourceCreatePage");
-        final ResourceCreatePage resourceCreatePage = importVspFlow.run()
+        ResourceCreatePage resourceCreatePage = importVspFlow.run()
             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
-
-        extendTest.log(Status.INFO, String.format("Onboarding '%s' package", vnfCnfFile));
         final CreateResourceFromVspFlow createResourceFlow = new CreateResourceFromVspFlow(webDriver, resourceName);
-        createResourceFlow.run(resourceCreatePage);
-        extendTest.log(Status.INFO, String.format("Successfully onboarded the package '%s'", vnfCnfFile));
+        resourceCreatePage = createResourceFlow.run(resourceCreatePage)
+            .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
+        resourceCreatePage.isLoaded();
+        resourceCreatePage.certifyComponent();
+        ExtentTestActions.takeScreenshot(Status.INFO, "resource-certified",
+            String.format("Resource '%s' was certified", resourceName));
+        downloadAndVerifyOnboardedPackage(loadComponentPage());
+    }
 
-        extendTest.log(Status.INFO, "Loading Component Page");
-        final ComponentPage componentPage = loadComponentPage();
-        extendTest.log(Status.INFO, "Downloading Tosca CSAR generated");
+    private void runDistribution(final String resourceName) {
+        final ServiceCreateData serviceCreateData = createServiceFormData();
+        final ServiceCreatePage serviceCreatePage = createService(goToHomePage(topNavComponent), serviceCreateData);
+        final ComponentData parentComponent = new ComponentData();
+        parentComponent.setName(serviceCreateData.getName());
+        parentComponent.setVersion("0.1");
+        parentComponent.setComponentType(ComponentType.SERVICE);
+        final ComponentData componentToAdd = new ComponentData();
+        componentToAdd.setName(resourceName);
+        componentToAdd.setVersion("1.0");
+        componentToAdd.setComponentType(ComponentType.RESOURCE);
+        final AddNodeToCompositionFlow addNodeToCompositionFlow = new AddNodeToCompositionFlow(webDriver, parentComponent, componentToAdd);
+        ComponentPage componentPage = loadComponentPage();
+        final CompositionPage compositionPage = (CompositionPage) addNodeToCompositionFlow.run(componentPage.goToComposition())
+            .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return CompositionPage"));
+        compositionPage.isLoaded();
+             ExtentTestActions.takeScreenshot(Status.INFO, "node-added-to-composition",
+                   String.format("Resource '%s' was added to composition", serviceCreateData.getName()));
+        componentPage = compositionPage.goToGeneral();
+        componentPage.isLoaded();
+        componentPage.certifyComponent();
+        ExtentTestActions.takeScreenshot(Status.INFO, "service-certified",
+            String.format("Service '%s' was certified", serviceCreateData.getName()));
+
+        downloadAndVerifyOnboardedPackage(componentPage);
+    }
+
+    private void downloadAndVerifyOnboardedPackage(final ComponentPage componentPage) {
         final DownloadToscaCsarFlow downloadToscaCsarFlow = downloadToscaCsar(componentPage);
         final ToscaArtifactsPage toscaArtifactsPage = downloadToscaCsarFlow.getLandedPage()
             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ToscaArtifactsPage"));
         assertThat("No artifact download was found", toscaArtifactsPage.getDownloadedArtifactList(), not(empty()));
-        extendTest.log(Status.INFO, "Tosca CSAR was successfully downloaded");
-
         final String downloadedCsarName = toscaArtifactsPage.getDownloadedArtifactList().get(0);
-        extendTest.log(Status.INFO, String
-            .format("Verifying if the onboarded package is included in the downloaded csar '%s'", downloadedCsarName));
         verifyOnboardedPackage(downloadedCsarName);
     }
 
+    private ServiceCreatePage createService(final HomePage homePage, final ServiceCreateData serviceCreateData) {
+        final CreateServiceFlow createServiceFlow = new CreateServiceFlow(webDriver, serviceCreateData);
+        return createServiceFlow.run(homePage)
+            .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
+    }
+
+    private ServiceCreateData createServiceFormData() {
+        final ServiceCreateData serviceCreateData = new ServiceCreateData();
+        serviceCreateData.setRandomName(ElementFactory.addRandomSuffixToName(ElementFactory.getServicePrefix()));
+        serviceCreateData.setCategory(ServiceCategoriesEnum.E2E_SERVICE.getValue());
+        serviceCreateData.setDescription("aDescription");
+        return serviceCreateData;
+    }
+
+    /**
+     * Go to the system home page through the top nav menu.
+     *
+     * @param topNavComponent the top nav component
+     */
+    private HomePage goToHomePage(final TopNavComponent topNavComponent) {
+        topNavComponent.isLoaded();
+        homePage = topNavComponent.clickOnHome();
+        homePage.isLoaded();
+        ExtentTestActions.takeScreenshot(Status.INFO, "home-is-loaded", "The Home page is loaded.");
+        return homePage;
+    }
+
     /**
      * Loads Component Page
      *
      * @return ComponentPage
      */
     private ComponentPage loadComponentPage() {
-        final ResourceLeftSideMenu resourceLeftSideMenu = new ResourceLeftSideMenu(webDriver);
-        resourceLeftSideMenu.isLoaded();
-        final ResourceWorkspaceTopBarComponent workspaceTopBarComponent = new ResourceWorkspaceTopBarComponent(
-            webDriver);
-        workspaceTopBarComponent.isLoaded();
-        final ComponentPage componentPage = Optional
-            .of(new ComponentPage(webDriver))
-            .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ComponentPage"));
+        final ComponentPage componentPage = Optional.of(new ComponentPage(webDriver))
+               .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ComponentPage"));
         componentPage.isLoaded();
         return componentPage;
     }
@@ -174,9 +219,4 @@ public class EtsiOnboardVnfCnfUiTests extends SetupCDTest {
             fail(String.format("%s Error: %s", errorMsg, e.getMessage()));
         }
     }
-
-    @Override
-    protected UserRoleEnum getRole() {
-        return UserRoleEnum.DESIGNER;
-    }
 }
index 3cf81aa..af2c959 100644 (file)
@@ -30,8 +30,10 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Optional;
+import org.onap.sdc.backend.ci.tests.datatypes.enums.ComponentType;
 import org.onap.sdc.backend.ci.tests.datatypes.enums.ResourceCategoryEnum;
 import org.onap.sdc.backend.ci.tests.utils.general.ElementFactory;
+import org.onap.sdc.frontend.ci.tests.datatypes.ComponentData;
 import org.onap.sdc.frontend.ci.tests.datatypes.ResourceCreateData;
 import org.onap.sdc.frontend.ci.tests.exception.UnzipException;
 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
@@ -42,6 +44,7 @@ import org.onap.sdc.frontend.ci.tests.flow.CreateVfcFlow;
 import org.onap.sdc.frontend.ci.tests.flow.DownloadCsarArtifactFlow;
 import org.onap.sdc.frontend.ci.tests.flow.exception.UiTestFlowRuntimeException;
 import org.onap.sdc.frontend.ci.tests.pages.ResourceCreatePage;
+import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.ToscaArtifactsPage;
 import org.onap.sdc.frontend.ci.tests.pages.home.HomePage;
 import org.onap.sdc.frontend.ci.tests.utilities.FileHandling;
@@ -93,8 +96,12 @@ public class ImportVfcUiTest extends SetupCDTest {
         final CreateVfFlow createVfFlow = createVF();
 
         final AddNodeToCompositionFlow addNodeToCompositionFlow = addNodeToCompositionFlow(createVfFlow);
-
-        createVfFlow.getLandedPage().get().clickOnCertify();
+        final CompositionPage compositionPage = addNodeToCompositionFlow.getLandedPage()
+            .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return CompositionPage"));
+        compositionPage.isLoaded();
+        final ResourceCreatePage resourceCreatePage = compositionPage.goToGeneral();
+        resourceCreatePage.isLoaded();
+        resourceCreatePage.clickOnCertify();
         yamlObject = downloadToscaArtifact(createVfFlow.getLandedPage().get());
         checkMetadata(yamlObject, vfCreateData);
         checkTopologyTemplate(yamlObject);
@@ -102,8 +109,18 @@ public class ImportVfcUiTest extends SetupCDTest {
     }
 
     private AddNodeToCompositionFlow addNodeToCompositionFlow(final CreateVfFlow createVfFlow) {
-        final AddNodeToCompositionFlow addNodeToCompositionFlow = new AddNodeToCompositionFlow(webDriver, vfCreateData, vfcCreateData);
-        addNodeToCompositionFlow.run(createVfFlow.getLandedPage().get());
+        final ComponentData parentComponent = new ComponentData();
+        parentComponent.setName(vfCreateData.getName());
+        parentComponent.setVersion("0.1");
+        parentComponent.setComponentType(ComponentType.RESOURCE);
+        final ComponentData componentToAdd = new ComponentData();
+        componentToAdd.setName(vfcCreateData.getName());
+        componentToAdd.setVersion("1.0");
+        componentToAdd.setComponentType(ComponentType.RESOURCE);
+        final AddNodeToCompositionFlow addNodeToCompositionFlow = new AddNodeToCompositionFlow(webDriver, parentComponent, componentToAdd);
+        final ResourceCreatePage resourceCreatePage = createVfFlow.getLandedPage()
+            .orElseThrow(() -> new UiTestFlowRuntimeException("Expecting a ResourceCreatePage"));
+        addNodeToCompositionFlow.run(resourceCreatePage.goToComposition());
         return addNodeToCompositionFlow;
     }
 
index 4ecbbc1..07d5429 100644 (file)
@@ -3,43 +3,66 @@ package org.onap.sdc.frontend.ci.tests.flow;
 import com.aventstack.extentreports.Status;
 import java.util.Objects;
 import java.util.Optional;
-import org.onap.sdc.frontend.ci.tests.datatypes.ResourceCreateData;
+import org.onap.sdc.frontend.ci.tests.datatypes.ComponentData;
 import org.onap.sdc.frontend.ci.tests.pages.ComponentPage;
 import org.onap.sdc.frontend.ci.tests.pages.PageObject;
 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
+import org.openecomp.sdc.be.model.ComponentInstance;
 import org.openqa.selenium.WebDriver;
 
 public class AddNodeToCompositionFlow extends AbstractUiTestFlow {
 
-    private final ResourceCreateData destination;
-    private final ResourceCreateData resource;
+    private final ComponentData parentComponent;
+    private final ComponentData componentToAdd;
     private CompositionPage compositionPage;
-    private ComponentPage componentPage;
+    private ComponentInstance createdComponentInstance;
 
-    public AddNodeToCompositionFlow(final WebDriver webDriver, final ResourceCreateData destination, final ResourceCreateData resource) {
+    public AddNodeToCompositionFlow(final WebDriver webDriver, final ComponentData parentComponent, final ComponentData componentToAdd) {
         super(webDriver);
-        this.destination = destination;
-        this.resource = resource;
+        this.parentComponent = parentComponent;
+        this.componentToAdd = componentToAdd;
     }
 
     @Override
     public Optional<? extends PageObject> run(final PageObject... pageObjects) {
-        Objects.requireNonNull(destination);
-        Objects.requireNonNull(resource);
-        extendTest.log(Status.INFO, String.format("Adding Resource '%s' to VF/Service '%s'", resource.getName(), destination.getName()));
+        Objects.requireNonNull(parentComponent);
+        Objects.requireNonNull(parentComponent.getComponentType());
+        Objects.requireNonNull(componentToAdd);
+        extendTest.log(Status.INFO, String.format("Adding Resource '%s' to VF/Service '%s'", componentToAdd.getName(), parentComponent.getName()));
 
-        componentPage = findParameter(pageObjects, ComponentPage.class);
+        compositionPage = findParameter(pageObjects, CompositionPage.class);
+        compositionPage.isLoaded();
+        addNodeToComposition();
+        final ComponentPage componentPage = compositionPage.goToGeneral();
         componentPage.isLoaded();
-
         compositionPage = componentPage.goToComposition();
-        compositionPage.isLoaded();
-        compositionPage.addNodeToResourceCompositionUsingApi(destination.getName(), "0.1", resource.getName(), "1.0");
-        compositionPage.goToGeneral();
-        return Optional.of(compositionPage);
+        return Optional.of(this.compositionPage);
+    }
+
+    private void addNodeToComposition() {
+        switch (parentComponent.getComponentType()) {
+            case SERVICE:
+                createdComponentInstance = compositionPage
+                    .addNodeToServiceCompositionUsingApi(parentComponent.getName(), parentComponent.getVersion(), componentToAdd.getName(),
+                        componentToAdd.getVersion());
+                break;
+            case RESOURCE:
+                createdComponentInstance = compositionPage
+                    .addNodeToResourceCompositionUsingApi(parentComponent.getName(), parentComponent.getVersion(), componentToAdd.getName(),
+                        componentToAdd.getVersion());
+                break;
+            default:
+                throw new UnsupportedOperationException(
+                    String.format("Add node in a %s not yet supported", parentComponent.getComponentType().getValue()));
+        }
     }
 
     @Override
-    public Optional<? extends PageObject> getLandedPage() {
-        return Optional.ofNullable(componentPage);
+    public Optional<CompositionPage> getLandedPage() {
+        return Optional.ofNullable(compositionPage);
+    }
+
+    public Optional<ComponentInstance> getCreatedComponentInstance() {
+        return Optional.ofNullable(createdComponentInstance);
     }
-}
+}
\ No newline at end of file
index b4e8381..367fb89 100644 (file)
 package org.onap.sdc.frontend.ci.tests.flow;
 
 import com.aventstack.extentreports.Status;
-import org.onap.sdc.frontend.ci.tests.datatypes.ResourceCreateData;
-import org.onap.sdc.frontend.ci.tests.pages.ResourceCreatePage;
+import java.util.Optional;
 import org.onap.sdc.frontend.ci.tests.execute.setup.ExtentTestActions;
 import org.onap.sdc.frontend.ci.tests.pages.PageObject;
+import org.onap.sdc.frontend.ci.tests.pages.ResourceCreatePage;
 import org.openqa.selenium.WebDriver;
 
-import java.util.Optional;
-
 /**
  * UI Flow for Resource creation
  */
index c40205c..8b6a391 100644 (file)
@@ -44,6 +44,7 @@ public class CreateVlmFlow extends AbstractUiTestFlow {
 
     @Override
     public Optional<? extends PageObject> run(PageObject... pageObjects) {
+        extendTest.log(Status.INFO, String.format("Starting flow to create a VLM"));
         final TopNavComponent topNavComponent = getParameter(pageObjects, TopNavComponent.class)
             .orElse(new TopNavComponent(webDriver));
         extendTest.log(Status.INFO, "Accessing the Onboard Home Page to create a VLM");
index 614dc1a..aa0d1c6 100644 (file)
@@ -53,6 +53,8 @@ public class CreateVspFlow extends AbstractUiTestFlow {
 
     @Override
     public Optional<PageObject> run(final PageObject... pageObjects) {
+        extendTest.log(Status.INFO,
+            String.format("Creating VSP '%s' by onboarding ETSI VNF/CNF package '%s'", resourceName, packageFile));
         final TopNavComponent topNavComponent = findParameter(pageObjects, TopNavComponent.class);
         extendTest.log(Status.INFO, "Accessing the Onboard Home Page");
         topNavComponent.isLoaded();
index d785c1f..f503d4f 100644 (file)
@@ -48,7 +48,9 @@ public class DownloadToscaCsarFlow extends AbstractUiTestFlow {
 
     @Override
     public Optional<PageObject> run(final PageObject... pageObjects) {
+        extendTest.log(Status.INFO, "Downloading Tosca CSAR generated");
         final ComponentPage componentPage = findParameter(pageObjects, ComponentPage.class);
+        componentPage.isLoaded();
         toscaArtifactsPage = componentPage.goToToscaArtifacts();
         toscaArtifactsPage.isLoaded();
         toscaArtifactsPage.clickOnDownload("Tosca Model");
@@ -57,8 +59,8 @@ public class DownloadToscaCsarFlow extends AbstractUiTestFlow {
         assertThat("The downloaded CSAR should exist", downloadedCsar, is(notNullValue()));
         assertThat("The downloaded CSAR should exist", downloadedCsar.exists(), is(true));
         toscaArtifactsPage.addToDownloadedArtifactList(downloadedCsar.getName());
+        extendTest.log(Status.INFO, "Tosca CSAR was successfully downloaded");
         ExtentTestActions.takeScreenshot(Status.INFO, "tosca-csar-downloaded", "TOSCA CSAR Downloaded");
-
         return Optional.of(toscaArtifactsPage);
     }
 
index 0f1330f..58a284a 100644 (file)
@@ -45,6 +45,7 @@ public class ImportVspFlow extends AbstractUiTestFlow {
     public Optional<ResourceCreatePage> run(final PageObject... pageObjects) {
         final VspRepositoryModalComponent vspRepositoryModalComponent = openVspRepository();
         searchForVsp(vspRepositoryModalComponent);
+        extendTest.log(Status.INFO, String.format("Importing VSP '%s'", resourceName));
         resourceCreatePage = importVsp(vspRepositoryModalComponent);
         return Optional.of(resourceCreatePage);
     }
diff --git a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ComponentCertificationModal.java b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/ComponentCertificationModal.java
new file mode 100644 (file)
index 0000000..9232307
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.frontend.ci.tests.pages;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handles the Commit Modal UI action when certifying a component
+ */
+public class ComponentCertificationModal extends AbstractPageObject {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ComponentCertificationModal.class);
+
+    private WebElement wrappingElement;
+
+    public ComponentCertificationModal(final WebDriver webDriver) {
+        super(webDriver);
+    }
+
+    public void isLoaded() {
+        LOGGER.debug("Finding element with xpath '{}'", XpathSelector.MODAL_DIV.getXpath());
+        wrappingElement = waitForElementVisibility(XpathSelector.MODAL_DIV.getXpath());
+    }
+
+    /**
+     * Fills commit text area with a default message.
+     */
+    public void fillCommentWithDefaultMessage() {
+        final WebElement commentTxt = wrappingElement.findElement(By.xpath(XpathSelector.COMMIT_COMMENT_TXT.getXpath()));
+        commentTxt.sendKeys("UI Integration Test");
+    }
+
+    /**
+     * Clicks on the modal submit and confirms success.
+     */
+    public void submit() {
+        final WebElement commitAndSubmitBtn = wrappingElement.findElement(By.xpath(XpathSelector.MODAL_OK_BTN.getXpath()));
+        commitAndSubmitBtn.click();
+    }
+
+    /**
+     * Enum that contains identifiers and xpath expressions to elements related to the enclosing page object.
+     */
+    @AllArgsConstructor
+    private enum XpathSelector {
+        MODAL_DIV("sdc-modal-type-custom", "//div[contains(@class, '%s')]"),
+        COMMIT_COMMENT_TXT("checkindialog", "//textarea[@data-tests-id='%s']"),
+        MODAL_OK_BTN("confirm-modal-button-ok", "//button[@data-tests-id='%s']"),
+        MODAL_CANCEL_BTN("confirm-modal-button-cancel", "//button[@data-tests-id='%s']");
+
+        @Getter
+        private final String id;
+        private final String xpath;
+
+        public String getXpath() {
+            return String.format(xpath, id);
+        }
+    }
+
+}
index 5b283f3..bb30af1 100644 (file)
@@ -49,4 +49,9 @@ public class ComponentPage extends AbstractPageObject {
     public CompositionPage goToComposition() {
         return resourceLeftSideMenu.clickOnCompositionMenuItem();
     }
+
+    public void certifyComponent() {
+        workspaceTopBarComponent.certifyComponent();
+    }
+
 }
index 3737577..6dc98c4 100644 (file)
 
 package org.onap.sdc.frontend.ci.tests.pages;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalToIgnoringCase;
-import static org.hamcrest.Matchers.startsWithIgnoringCase;
-import static org.hamcrest.core.Is.is;
-
 import java.util.List;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
-import org.onap.sdc.frontend.ci.tests.datatypes.DataTestIdEnum;
-import org.onap.sdc.frontend.ci.tests.datatypes.LifeCycleStateEnum;
 import org.onap.sdc.frontend.ci.tests.datatypes.ResourceCreateData;
 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.ToscaArtifactsPage;
-import org.onap.sdc.frontend.ci.tests.utilities.GeneralUIUtils;
 import org.onap.sdc.frontend.ci.tests.utilities.LoaderHelper;
 import org.onap.sdc.frontend.ci.tests.utilities.NotificationComponent;
 import org.onap.sdc.frontend.ci.tests.utilities.NotificationComponent.NotificationType;
@@ -66,10 +58,10 @@ public class ResourceCreatePage extends ComponentPage {
 
     @Override
     public void isLoaded() {
-        topBarComponent.isLoaded();
-        final String lifeCycleState = topBarComponent.getLifecycleState();
-        assertThat("Life cycle state should be as expected",
-            lifeCycleState, is(startsWithIgnoringCase(LifeCycleStateEnum.IN_DESIGN.getValue())));
+        super.isLoaded();
+        waitForElementVisibility(By.xpath(XpathSelector.NAME_INPUT.getXpath()));
+        waitForElementVisibility(By.xpath(XpathSelector.CATEGORY_SELECT.getXpath()));
+        waitForElementVisibility(By.xpath(XpathSelector.DESCRIPTION_TEXT_AREA.getXpath()));
     }
 
     /**
@@ -82,12 +74,15 @@ public class ResourceCreatePage extends ComponentPage {
     }
 
     /**
-     * Certify the resource and wait for success notification.
+     * Certifies the resource and wait for success notification.
      */
     public void clickOnCertify() {
         topBarComponent.clickOnCertify();
-        findElement(By.xpath(XpathSelector.APPROVE_MESSAGE.getXpath())).sendKeys("Resource certified successfully");
-        GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.ModalItems.OK.getValue()).click();
+        final ComponentCertificationModal componentCertificationModal = new ComponentCertificationModal(webDriver);
+        componentCertificationModal.isLoaded();
+        componentCertificationModal.fillCommentWithDefaultMessage();
+        componentCertificationModal.submit();
+        loaderHelper.waitForLoader(20);
         notificationComponent.waitForNotification(NotificationType.SUCCESS, 20);
     }
 
index 942c32a..9af7e73 100644 (file)
@@ -20,6 +20,8 @@ package org.onap.sdc.frontend.ci.tests.pages;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import org.onap.sdc.frontend.ci.tests.utilities.NotificationComponent;
+import org.onap.sdc.frontend.ci.tests.utilities.NotificationComponent.NotificationType;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
@@ -33,6 +35,8 @@ public class ResourceWorkspaceTopBarComponent extends AbstractPageObject {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ResourceWorkspaceTopBarComponent.class);
 
+    private final NotificationComponent notificationComponent;
+
     private WebElement wrappingElement;
     private WebElement lifecycleStateDiv;
     private WebElement versionContainerDiv;
@@ -40,6 +44,7 @@ public class ResourceWorkspaceTopBarComponent extends AbstractPageObject {
 
     public ResourceWorkspaceTopBarComponent(final WebDriver webDriver) {
         super(webDriver);
+        notificationComponent = new NotificationComponent(webDriver);
     }
 
     @Override
@@ -59,6 +64,15 @@ public class ResourceWorkspaceTopBarComponent extends AbstractPageObject {
         waitToBeClickable(XpathSelector.CERTIFY_BTN.getXpath()).click();
     }
 
+    public void certifyComponent() {
+        clickOnCertify();
+        final ComponentCertificationModal componentCertificationModal = new ComponentCertificationModal(webDriver);
+        componentCertificationModal.isLoaded();
+        componentCertificationModal.fillCommentWithDefaultMessage();
+        componentCertificationModal.submit();
+        notificationComponent.waitForNotification(NotificationType.SUCCESS, 20);
+    }
+
     public String getLifecycleState() {
         return lifecycleStateDiv.findElement(By.xpath(XpathSelector.FORM_LIFE_CYCLE_STATE.getXpath())).getText();
     }
index e9fc387..4635d2a 100644 (file)
@@ -37,7 +37,7 @@ import org.openqa.selenium.support.ui.Select;
 /**
  * Represents the Service Create Page
  */
-public class ServiceCreatePage extends AbstractPageObject {
+public class ServiceCreatePage extends ComponentPage {
 
     private final LoaderHelper loaderHelper;
     private final NotificationComponent notificationComponent;
index 7eb15bb..88b682b 100644 (file)
@@ -24,7 +24,6 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
 import org.onap.sdc.frontend.ci.tests.pages.home.HomePage;
-import org.onap.sdc.frontend.ci.tests.utilities.GeneralUIUtils;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
@@ -129,12 +128,12 @@ public class TopNavComponent extends AbstractPageObject {
      * @return the hovered breadcrumb arrow element
      */
     public WebElement hoverToBreadcrumbArrow(final int arrowPosition) {
-        final Actions actions = new Actions(GeneralUIUtils.getDriver());
+        final Actions actions = new Actions(webDriver);
         final List<WebElement> arrowElementList = getWait()
             .until(
                 ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(XpathSelector.ARROW_DROPDOWN.getXpath())));
         final WebElement selectedArrowElement = arrowElementList.get(arrowPosition);
-        actions.moveToElement(selectedArrowElement).perform();
+        actions.moveByOffset(20, 20).moveToElement(selectedArrowElement).perform();
         return selectedArrowElement;
     }