X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=integration-tests%2Fsrc%2Ftest%2Fjava%2Forg%2Fonap%2Fsdc%2Ffrontend%2Fci%2Ftests%2Fexecute%2Fsanity%2FImportVfcUiTest.java;h=ba4b6d77febe1835659461afba9f9464a31d5c7f;hb=fbab79aeaccf74385c9a55b697a1055a86bdf171;hp=a571c1b9f672e17495af840893483de3994d1ed4;hpb=5aa2c74c18bc5f7e9774f192d7419259a0fac733;p=sdc.git diff --git a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java index a571c1b9f6..ba4b6d77fe 100644 --- a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java +++ b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java @@ -19,23 +19,26 @@ package org.onap.sdc.frontend.ci.tests.execute.sanity; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.anEmptyMap; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.emptyString; import static org.hamcrest.Matchers.not; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import com.aventstack.extentreports.Status; import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.Optional; +import org.apache.commons.collections.MapUtils; 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.ModelName; 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; @@ -45,14 +48,20 @@ import org.onap.sdc.frontend.ci.tests.flow.AddNodeToCompositionFlow; import org.onap.sdc.frontend.ci.tests.flow.CreateVfFlow; 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.GoToInterfaceDefinitionPageFlow; import org.onap.sdc.frontend.ci.tests.flow.exception.UiTestFlowRuntimeException; +import org.onap.sdc.frontend.ci.tests.pages.AttributeModal; +import org.onap.sdc.frontend.ci.tests.pages.AttributesPage; 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.component.workspace.CompositionDetailSideBarComponent; import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionDetailSideBarComponent.CompositionDetailTabName; import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionInformationTab; -import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionInterfaceOperationsModal; import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionInterfaceOperationsTab; import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage; +import org.onap.sdc.frontend.ci.tests.pages.component.workspace.InterfaceDefinitionOperationsModal; +import org.onap.sdc.frontend.ci.tests.pages.component.workspace.InterfaceDefinitionOperationsModal.InterfaceOperationsData.InputData; +import org.onap.sdc.frontend.ci.tests.pages.component.workspace.InterfaceDefinitionPage; 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; @@ -69,20 +78,22 @@ public class ImportVfcUiTest extends SetupCDTest { private HomePage homePage; private ResourceCreateData vfcCreateData; private ResourceCreateData vfCreateData; + private ComponentInstance createdComponentInstance; + private final String vfcCategory = ResourceCategoryEnum.NETWORK_L4.getSubCategory(); @BeforeClass public void beforeClass() { filePath = FileHandling.getFilePath("VFCs/"); + webDriver = DriverFactory.getDriver(); + homePage = new HomePage(webDriver); } @Test public void importVFC_createVF_addVFC2VF_test() throws UnzipException { ComponentPage componentPage; - webDriver = DriverFactory.getDriver(); - homePage = new HomePage(webDriver); // TC - Import VFC with root namespace String fileName = "org.openecomp.resource.VFC-root.yml"; - CreateVfcFlow createVfcFlow = createVFC(fileName); + CreateVfcFlow createVfcFlow = createVFC(fileName, ModelName.DEFAULT_MODEL_NAME.getName(), vfcCategory); componentPage = createVfcFlow.getLandedPage().orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage")); componentPage.isLoaded(); @@ -96,16 +107,22 @@ public class ImportVfcUiTest extends SetupCDTest { // TC - Import hierarchy of VFCs fileName = "org.openecomp.resource.VFC-child.yml"; - createVfcFlow = createVFC(fileName); - componentPage = createVfcFlow.getLandedPage() - .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage")); + createVfcFlow = createVFC(fileName, ModelName.DEFAULT_MODEL_NAME.getName(), vfcCategory); + componentPage = createVfcFlow.getLandedPage().orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage")); + componentPage.isLoaded(); + + componentPage = manageAttributes(componentPage); componentPage.isLoaded(); componentPage.certifyComponent(); componentPage.isLoaded(); - yamlObject = downloadToscaArtifact(createVfcFlow.getLandedPage().get()); + yamlObject = downloadToscaArtifact(componentPage); checkMetadata(yamlObject, vfcCreateData); checkNodeTypes(yamlObject); + + componentPage = viewInterfaceDefinitionFromVFC(componentPage); + componentPage.isLoaded(); + homePage.getTopNavComponent().clickOnHome(); // TC - Import VFC with interface inputs @@ -126,6 +143,67 @@ public class ImportVfcUiTest extends SetupCDTest { } + private ComponentPage viewInterfaceDefinitionFromVFC(final ComponentPage componentPage) { + final GoToInterfaceDefinitionPageFlow goToInterfaceDefinitionPageFlow = new GoToInterfaceDefinitionPageFlow(webDriver); + goToInterfaceDefinitionPageFlow.run(componentPage); + final InterfaceDefinitionPage interfaceDefinitionPage = goToInterfaceDefinitionPageFlow.getLandedPage() + .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return InterfaceDefinitionPage")); + final var operationName = "create"; + assertTrue(interfaceDefinitionPage.isInterfaceDefinitionOperationPresent(operationName)); + final InterfaceDefinitionOperationsModal interfaceDefinitionOperationsModal = + interfaceDefinitionPage.clickOnInterfaceDefinitionOperation(operationName); + interfaceDefinitionOperationsModal.isLoaded(true); + ExtentTestActions + .takeScreenshot(Status.INFO, "clickOnOInterfaceOperation", "Interface Definition Operation Modal opened"); + checkInterfaceDefinitionData(interfaceDefinitionOperationsModal); + interfaceDefinitionOperationsModal.clickOnCancel(); + return interfaceDefinitionPage; + } + + @Test + public void importVfcWithModel() { + final String fileName = "VFC-For-Model.yaml"; + final CreateVfcFlow createVfcFlow = createVFC(fileName, ModelName.ETSI_SOL001_v2_5_1.getName(), vfcCategory); + final ComponentPage componentPage = createVfcFlow.getLandedPage() + .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage")); + componentPage.isLoaded(); + componentPage.certifyComponent(); + componentPage.isLoaded(); + } + + private void checkInterfaceDefinitionData(final InterfaceDefinitionOperationsModal interfaceDefinitionOperationsModal) { + assertTrue(interfaceDefinitionOperationsModal.getDescription().isEmpty()); + assertEquals("path/to/my/implementation.sh", interfaceDefinitionOperationsModal.getImplementationName()); + final List inputList = interfaceDefinitionOperationsModal.getInputs(); + assertTrue(inputList.stream().anyMatch(inputData -> "first".equals(inputData.getName())), "Input of name 'first' expected"); + } + + private ComponentPage manageAttributes(final ComponentPage componentPage) { + final AttributesPage attributesPage = componentPage.goToAttributes(); + attributesPage.isLoaded(); + + assertTrue(attributesPage.isAttributePresent("test_1")); + assertTrue(attributesPage.isAttributePresent("test_2")); + assertTrue(attributesPage.isAttributePresent("test_3")); + assertTrue(attributesPage.isAttributePresent("test_4")); + + attributesPage.deleteAttribute("test_2"); + assertFalse(attributesPage.isAttributePresent("test_2")); + ExtentTestActions.takeScreenshot(Status.INFO, "attributesPage.deleteAttribute", "Attribute 'test_2' successfully deleted"); + attributesPage.addAttribute(new AttributeModal.AttributeData("test_9", "Additional attribute added from UI", "string", "one More Attribute")); + attributesPage.isLoaded(); + assertTrue(attributesPage.isAttributePresent("test_9")); + ExtentTestActions.takeScreenshot(Status.INFO, "attributesPage.addAttribute", "Additional Attribute 'test_9' successfully added"); + + attributesPage.editAttribute(new AttributeModal.AttributeData("test_9", "Additional attribute added from UI".toUpperCase(), "string", + "one More Attribute".toUpperCase())); + attributesPage.isLoaded(); + assertTrue(attributesPage.isAttributePresent("test_9")); + ExtentTestActions.takeScreenshot(Status.INFO, "attributesPage.editAttribute", "Additional Attribute 'test_9' successfully altered"); + + return attributesPage.clickOnGeneralMenuItem(ResourceCreatePage.class); + } + private CompositionPage addInterfaceOperations(final ComponentPage componentPage) { final AddNodeToCompositionFlow addNodeToCompositionFlow = addNodeToCompositionFlow(componentPage); final CompositionPage compositionPage = addNodeToCompositionFlow.getLandedPage() @@ -133,7 +211,7 @@ public class ImportVfcUiTest extends SetupCDTest { final CompositionDetailSideBarComponent detailSideBar = compositionPage.getDetailSideBar(); detailSideBar.isLoaded(); - final ComponentInstance createdComponentInstance = addNodeToCompositionFlow.getCreatedComponentInstance() + createdComponentInstance = addNodeToCompositionFlow.getCreatedComponentInstance() .orElseThrow(() -> new UiTestFlowRuntimeException("Expecting a ComponentInstance")); compositionPage.selectNode(createdComponentInstance.getName()); @@ -143,17 +221,22 @@ public class ImportVfcUiTest extends SetupCDTest { compositionInterfaceOperationsTab.isLoaded(); ExtentTestActions.takeScreenshot(Status.INFO, "compositionInterfaceOperationsTab", "Composition Interface Operations Tab opened"); assertTrue(compositionInterfaceOperationsTab.isOperationPresent("create")); - CompositionInterfaceOperationsModal compositionInterfaceOperationsModal = compositionInterfaceOperationsTab.clickOnOperation("create"); + InterfaceDefinitionOperationsModal compositionInterfaceOperationsModal = compositionInterfaceOperationsTab.clickOnOperation("create"); compositionInterfaceOperationsModal.isLoaded(); ExtentTestActions .takeScreenshot(Status.INFO, "compositionInterfaceOperationsTab.clickOnOperation", "Composition Interface Operations Modal opened"); - compositionInterfaceOperationsModal.clickOnDelete(); + compositionInterfaceOperationsModal.deleteInput("first"); ExtentTestActions.takeScreenshot(Status.INFO, "compositionInterfaceOperationsModal.clickOnDelete", "Input deleted"); - compositionInterfaceOperationsModal.addInput(); - ExtentTestActions.takeScreenshot(Status.INFO, "compositionInterfaceOperationsModal.addInput", "Adding Input"); - final CompositionInterfaceOperationsModal.InterfaceOperationsData interfaceOperationsData = new CompositionInterfaceOperationsModal.InterfaceOperationsData - ("This is CREATE operation", "fullPath/to/my/newImplementation.sh", "second", "9876"); + List inputDataList = List.of( + new InputData("stringInput", "string", "1"), + new InputData("booleanInput", "boolean", true), + new InputData("integerInput", "integer", 1) + ); + final InterfaceDefinitionOperationsModal.InterfaceOperationsData interfaceOperationsData = + new InterfaceDefinitionOperationsModal.InterfaceOperationsData( + "This is CREATE operation", "fullPath/to/my/newImplementation.sh", inputDataList + ); compositionInterfaceOperationsModal.updateInterfaceOperation(interfaceOperationsData); compositionInterfaceOperationsTab.isLoaded(); @@ -233,8 +316,8 @@ public class ImportVfcUiTest extends SetupCDTest { return downloadCsarArtifactFlow; } - private CreateVfcFlow createVFC(final String fileName) { - vfcCreateData = createVfcFormData(); + private CreateVfcFlow createVFC(final String fileName, final String model, final String category) { + vfcCreateData = createVfcFormData(model, category); final CreateVfcFlow createVfcFlow = new CreateVfcFlow(webDriver, vfcCreateData, filePath + fileName); createVfcFlow.run(homePage); return createVfcFlow; @@ -247,10 +330,11 @@ public class ImportVfcUiTest extends SetupCDTest { return createVfFlow; } - private ResourceCreateData createVfcFormData() { + private ResourceCreateData createVfcFormData(final String model, final String category) { final ResourceCreateData vfcCreateData = new ResourceCreateData(); vfcCreateData.setRandomName(ElementFactory.getResourcePrefix() + "-VFC"); - vfcCreateData.setCategory(ResourceCategoryEnum.NETWORK_L4.getSubCategory()); + vfcCreateData.setModel(model); + vfcCreateData.setCategory(category); vfcCreateData.setTagList(Arrays.asList(vfcCreateData.getName(), "importVFC")); vfcCreateData.setDescription("aDescription"); vfcCreateData.setVendorName("Ericsson"); @@ -288,40 +372,49 @@ public class ImportVfcUiTest extends SetupCDTest { final Map mapEntry = getMapEntry(map, "node_types"); final Map nodeTypes = getMapEntry(mapEntry, mapEntry.keySet().iterator().next()); - assertNotNull(nodeTypes); + assertFalse(MapUtils.isEmpty(nodeTypes)); assertEquals("aDescription", nodeTypes.get("description")); final Map properties = getMapEntry(nodeTypes, "properties"); - assertThat(properties, not(anEmptyMap())); + assertFalse(MapUtils.isEmpty(properties)); final Map attributes = getMapEntry(nodeTypes, "attributes"); - assertThat(attributes, not(anEmptyMap())); + assertFalse(MapUtils.isEmpty(attributes)); final Map interfaces = getMapEntry(nodeTypes, "interfaces"); - assertThat(interfaces, not(anEmptyMap())); + assertFalse(MapUtils.isEmpty(interfaces)); } private void checkTopologyTemplate(final Map map) { - final Map mapEntry = getMapEntry(map, "topology_template"); - assertNotNull(mapEntry); + final Map topologyTemplate = getMapEntry(map, "topology_template"); + assertNotNull(topologyTemplate); + + final Map inputs = getMapEntry(topologyTemplate, "inputs"); + assertFalse(MapUtils.isEmpty(inputs)); - final Map properties = getMapEntry(mapEntry, "inputs"); - assertThat(properties, not(anEmptyMap())); + final Map nodeTemplates = getMapEntry(topologyTemplate, "node_templates"); + assertFalse(MapUtils.isEmpty(nodeTemplates)); - final Map attributes = getMapEntry(mapEntry, "node_templates"); - assertThat(attributes, not(anEmptyMap())); + final Map attributes = getMapEntry((Map) nodeTemplates.get(createdComponentInstance.getName()), "attributes"); + assertFalse(MapUtils.isEmpty(attributes)); + assertEquals(4, attributes.keySet().stream() + .filter(s -> (s.contains("test_1") || s.contains("test_3") || s.contains("test_4") || s.contains("test_9")) && !s.contains("test_2")) + .count()); - final Map interfaces = getMapEntry(mapEntry, "substitution_mappings"); - assertThat(interfaces, not(anEmptyMap())); + final Map substitutionMappings = getMapEntry(topologyTemplate, "substitution_mappings"); + assertFalse(MapUtils.isEmpty(substitutionMappings)); } - private void checkCompositionInterfaceOperations(final CompositionInterfaceOperationsModal compositionInterfaceOperationsModal, - final CompositionInterfaceOperationsModal.InterfaceOperationsData interfaceOperationsData) { + private void checkCompositionInterfaceOperations(final InterfaceDefinitionOperationsModal compositionInterfaceOperationsModal, + final InterfaceDefinitionOperationsModal.InterfaceOperationsData interfaceOperationsData) { assertEquals(interfaceOperationsData.getDescription(), compositionInterfaceOperationsModal.getDescription()); assertEquals(interfaceOperationsData.getImplementationName(), compositionInterfaceOperationsModal.getImplementationName()); - assertEquals(interfaceOperationsData.getInputName(), compositionInterfaceOperationsModal.getInputName()); - assertEquals(interfaceOperationsData.getInputValue(), compositionInterfaceOperationsModal.getInputValue()); + interfaceOperationsData.getInputList().forEach(inputData -> { + final boolean hasInput = compositionInterfaceOperationsModal.getInputs().stream() + .anyMatch(inputData1 -> inputData1.getName().equals(inputData.getName())); + assertTrue(hasInput, String.format("Expecting input '%s'", inputData.getName())); + }); } }