Merge automation from ECOMP's repository
[vid.git] / vid-automation / src / main / java / vid / automation / test / test / NewServiceInstanceTest.java
index 1738970..42749c1 100644 (file)
 package vid.automation.test.test;
 
-import com.google.common.collect.*;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateServiceInstancePost;
-import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2;
+import static junit.framework.TestCase.assertNull;
+import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.startsWith;
+import static org.hamcrest.MatcherAssert.assertThat;
+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.PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID;
+import static org.testng.Assert.assertEquals;
+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_5G_IN_NEW_INSTANTIATION_UI;
+import static vid.automation.test.infra.Features.FLAG_ASYNC_INSTANTIATION;
+import static vid.automation.test.infra.ModelInfo.PASQUALEVmxVpeBvService488Annotations;
+import static vid.automation.test.infra.ModelInfo.aLaCarteNetworkProvider5G;
+import static vid.automation.test.infra.ModelInfo.aLaCarteVnfGroupingService;
+import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails;
+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.services.SimulatorApi.RegistrationStrategy.APPEND;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
+import static vid.automation.test.test.ALaCarteflowTest.AIC;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+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.onap.sdc.ci.tests.datatypes.UserCredentials;
+import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetTenants;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIPostNamedQueryForViewEdit;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarte5G;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceAlacarte5GServiceWithNetwork;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse;
 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
-import org.openecomp.sdc.ci.tests.datatypes.UserCredentials;
-import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork.ResponseDetails;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
+import org.openqa.selenium.remote.RemoteWebElement;
 import org.testng.Assert;
-import org.testng.annotations.*;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 import vid.automation.test.Constants;
 import vid.automation.test.Constants.BrowseASDC.NewServicePopup;
-import vid.automation.test.infra.*;
+import vid.automation.test.infra.Click;
+import vid.automation.test.infra.FeatureTogglingTest;
+import vid.automation.test.infra.Features;
+import vid.automation.test.infra.Get;
+import vid.automation.test.infra.Input;
+import vid.automation.test.infra.ModelInfo;
+import vid.automation.test.infra.SelectOption;
+import vid.automation.test.infra.Wait;
 import vid.automation.test.model.Service;
 import vid.automation.test.model.User;
-import vid.automation.test.sections.*;
+import vid.automation.test.sections.BrowseASDCPage;
+import vid.automation.test.sections.DrawingBoardPage;
+import vid.automation.test.sections.InstantiationStatusPage;
+import vid.automation.test.sections.SideMenu;
+import vid.automation.test.sections.VidBasePage;
 import vid.automation.test.services.AsyncJobsService;
 import vid.automation.test.services.ServicesService;
 import vid.automation.test.services.SimulatorApi;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-import static junit.framework.TestCase.assertNull;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.testng.Assert.assertEquals;
-import static org.testng.AssertJUnit.assertTrue;
-import static vid.automation.test.infra.Features.FLAG_ASYNC_INSTANTIATION;
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
+import vid.automation.test.utils.ReadFile;
 
 @FeatureTogglingTest(FLAG_ASYNC_INSTANTIATION)
 public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
 
+    private static final String COMPLETED = "COMPLETED";
+    private static final String IN_PROGRESS = "IN_PROGRESS";
+    private static final String PENDING = "PENDING";
+    private final String vfModule0Name = "2017488_PASQUALEvpe0..2017488PASQUALEVpe..PASQUALE_base_vPE_BV..module-0";
+    private final String vfModule0UUID = "f8360508-3f17-4414-a2ed-6bc71161e8db";
     private ServicesService servicesService = new ServicesService();
     private DrawingBoardPage drawingBoardPage = new DrawingBoardPage();
     List<String> serviceModelLabelList = Arrays.asList("Model version", "Description", "Category", "UUID",
             "Invariant UUID", "Service type", "Service role");
     List<String> mandatoryServiceModelLabelList = Arrays.asList("Model version", "UUID", "Invariant UUID");
-    private final String defaultServiceModelForMostTests = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
     private final VidBasePage vidBasePage = new VidBasePage();
+    public static final String VNF_SET_BUTTON_TEST_ID = "form-set";
+    private static final Logger logger = LogManager.getLogger(NewServiceInstanceTest.class);
 
     @BeforeClass
     protected void dropAllAsyncJobs() {
@@ -60,36 +119,77 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
     }
 
     @BeforeMethod
-    protected void refreshPage() {
-        GeneralUIUtils.ultimateWait();
-
-        vidBasePage.refreshPage();
+    protected void goToWelcome() {
+        SideMenu.navigateToWelcomePage();
     }
 
     @Override
     protected UserCredentials getUserCredentials() {
-        String userName = Constants.Users.USP_VOICE_VIRTUAL_USP;
+        String userName = Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA;
         User user = usersService.getUser(userName);
         return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
     }
 
     @Test
     public void createNewServiceInstance_fullModelData_LeftPaneLabelsCorrect() throws Exception {
-        loadMacroServicePopup_noDynamicFields_fullModelDetails_ecompNamingFalse();
+        prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
+        loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
         assertServiceModelLabelsCorrect(serviceModelLabelList);
     }
 
     @Test
     public void createNewServiceInstance_partialModelData_LeftPaneLabelsCorrect() throws Exception {
-        loadMacroServicePopup_withDynamicFields_partialModelDetails_ecompNamingTrue();
+        prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
+        loadServicePopup(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails);
         assertServiceModelLabelsCorrect(mandatoryServiceModelLabelList);
     }
 
+    @Test
+    public void createNewServiceInstance_setFieldValue_resetDependenciesListsAndValues() {
+        resetGetTenantsCache();
+        try {
+            BrowseASDCPage browseASDCPage = new BrowseASDCPage();
+            prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
+            SimulatorApi.registerExpectation(Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_CAR_2020_ER, SimulatorApi.RegistrationStrategy.APPEND);
+            registerExpectationFromPreset(
+                    new PresetAAIGetTenants(
+                            "CAR_2020_ER",
+                            "MSO-dev-service-type",
+                            "registration_to_simulator/create_new_instance/aai_get_tenants_for_customer_CAR_2020_ER.json"),
+                    SimulatorApi.RegistrationStrategy.APPEND);
+
+            loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
+            Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
+            VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
+            GeneralUIUtils.ultimateWait();
+            String serviceType = "TYLER SILVIA";
+            Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
+            browseASDCPage.selectServiceTypeByName(serviceType);
+            String lcpRegion = "hvf6";
+            Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
+            viewEditPage.selectLcpRegion(lcpRegion, AIC);
+            browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
+
+            VidBasePage.selectSubscriberById("CAR_2020_ER");
+            assertElementDisabled("lcpRegion-select");
+            serviceType = "MSO-dev-service-type";
+            Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
+            browseASDCPage.selectServiceTypeByName(serviceType);
+            lcpRegion = "CAR_2020_ER";
+            Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
+            viewEditPage.selectLcpRegion(lcpRegion, AIC);
+            browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e66");
+        } finally {
+            resetGetTenantsCache();
+        }
+    }
+
     /**
      * asserts that the provided labels list is visible and that no other detail item appears in the model details panel.
      */
     protected void assertServiceModelLabelsCorrect(List<String> serviceModelLabelList) throws Exception {
-        WebElement modelInformation = getDriver().findElement(By.id("model-information"));
+        WebElement genericPopup = getDriver().findElement(By.tagName("generic-form-popup"));
+        WebElement modelInformation = genericPopup.findElement(By.id("model-information"));
         List<WebElement> modelInformationItems = modelInformation.findElements(By.xpath("./div"));
         assertEquals(modelInformationItems.size(), serviceModelLabelList.size());
         serviceModelLabelList.forEach(label -> {
@@ -101,179 +201,456 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
 
     @Test
     public void createNewServiceInstance_leftPane_serviceModelDataCorrect() {
-        Service service = servicesService.getService(NewServicePopup.SERVICE_UUID);
+        Service service = servicesService.getService(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId);
         String prefix = NewServicePopup.SERVICE_MODEL_DATA_TEST_ID_VALUE_PREFIX;
-        loadMacroServicePopup_noDynamicFields_fullModelDetails_ecompNamingFalse();
-        setNewInstance_leftPane_assertModelDataCorrect(NewServicePopup.SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID, prefix, service);
+        prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
+        loadServicePopup(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails);
+        logger.info("Expected service model properties: "+service.toString());
+        assertModelDataCorrect(NewServicePopup.SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID, prefix, service);
     }
 
     @Test
     public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingFalse() {
 
-        ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip",
-                "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+        ServiceData serviceData = new ServiceData(
+                macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
                 new ArrayList<>(),
                 false, true, true, true,
-                "2017-488_ADIOD-vPE 0",
-                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1,  ImmutableList.of("Bandwidth", "Bandwidth units"));
+                "2017-488_PASQUALE-vPE 0",
+                "2017488_PASQUALEvpe0..2017488PASQUALEVpe..PASQUALE_vRE_BV..module-1", 0, 1, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5");
 
-        String serviceInstanceName = deployServiceInstance(serviceData, false);
-        vidBasePage.screenshotDeployDialog(serviceInstanceName);
-        deployAndVerifyModuleInPendingTable(serviceInstanceName);
-        verifyOpenAuditInfo(serviceInstanceName);
-        verifyOpenViewEdit(serviceInstanceName);
-        verifyDeleteJob(serviceInstanceName);
-        verifyHideJob(serviceInstanceName);
+        prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
+
+        final String serviceInstanceName = createSriovService(serviceData, true);
+        createVnf(serviceData, true, true, serviceInstanceName);
+
+        createVfModule(serviceData, serviceInstanceName, false, false);
+
+    }
+
+    @Test(groups = "underDevelopment")
+    public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_DEV() {
+        /*
+        Upon failure in test dynamicFieldsEcompNamingFalse_FLESH(), exception will provide
+        the needed data for this DEV method:
+
+          1. "Current step" when the failure occurred
+          2. "Random alphabetic" that was randomized while test
+          3. "Starting reduxState" that was on the step that failed.
+
+        These data can be used for, accordingly, 1. startInStep param; 2, randomAlphabetic
+        param; 3. reduxForStep param.
+         */
+
+        // It should be easier to put `reduxForStep` in this file, to avoid Java's code-clutter and json escaping.
+        final String reduxForStep = ReadFile.loadResourceAsString(
+                "NewServiceInstanceTest/createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse.json");
+
+        createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("DEV", 5, reduxForStep, "mCaNk");
+    }
+
+    @Test
+    public void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse() {
+        createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH("RUNTIME", 0, null, randomAlphabetic(5));
+    }
+
+    private void createNewServiceInstance_macro_validPopupDataAndUI__dynamicFieldsEcompNamingFalse_FLESH(String mode, int startInStep, String reduxForStep, String randomAlphabetic) {
+
+        MutableInt i = new MutableInt();
+        Map<String, String> reduxStates = new HashMap<>();
+
+        ServiceData serviceData = new ServiceData(
+                macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse.modelVersionId,
+                Collections.singletonList("2017488 PASQUALEvpe0 asn:"),
+                false, false, true, false,
+                "2017-488_PASQUALE-vPE 0",
+                "2017488_PASQUALEvpe0..2017488PASQUALEVpe..PASQUALE_vRE_BV..module-1", 0, 1, ImmutableList.of("Bandwidth", "Bandwidth units"),
+                "25284168-24bb-4698-8cb4-3f509146eca5");
+
+        // this is the instance-name that createSriovService is going to use
+        String serviceInstanceName = randomAlphabetic + "instancename";
+
+        doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
+            prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
+                    false);
+            createSriovService(serviceData, false, randomAlphabetic);
+        });
+
+        doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
+                createVnf(serviceData, false, true, serviceInstanceName)
+        );
+
+        final String vnfInstanceName2 = randomAlphabetic + "instanceName";
+        final String vnfName2 = "2017-388_PASQUALE-vPE";
+
+        doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
+                createVnf(new VnfData(vnfName2 + " 0", "afacccf6-397d-45d6-b5ae-94c39734b168", vnfInstanceName2, false),
+                        false, Features.FLAG_DEFAULT_VNF.isActive(), serviceInstanceName)
+        );
+
+        doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () ->
+                createVfModule(serviceData, serviceInstanceName, false, true)
+        );
+
+        doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
+
+            editVfModuleAndJustSetName(vfModule0Name, vfModule0UUID);
+            if (Features.FLAG_DUPLICATE_VNF.isActive()) {
+                duplicateVnf(serviceData.vnfData, 2);
+            }
+            vidBasePage.screenshotDeployDialog(serviceInstanceName);
+        });
+
+        doReduxStep(reduxStates, randomAlphabetic, startInStep, reduxForStep, i, mode, () -> {
+            prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingFalsePartialModelDetailsVnfEcompNamingFalse,
+                    true);
+
+            final String vfModuleName1 = "2017488PASQUALEVpe..PASQUALE_base_vPE_BV..module-0";
+            final String vfModuleName2 = "2017488PASQUALEVpe..PASQUALE_vRE_BV..module-1";
+            final String request1 = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
+            final String request2 = "ce010256-3fdd-4cb5-aed7-37112a2c6e93";
+            final ImmutableMap<Keys, String> vars = ImmutableMap.<Keys, String>builder()
+                    .put(Keys.SERVICE_NAME, serviceInstanceName)
+                    .put(Keys.VNF_NAME, cleanSeparators("2017-488_PASQUALE-vPE", serviceData.vnfData.vnfInstanceName))
+                    .put(Keys.VFM_NAME1, cleanSeparators(vfModuleName1 , "VF instance name ZERO"))
+                    .put(Keys.VFM_NAME2, cleanSeparators(vfModuleName2 , "VF instance name"))
+                    .put(Keys.VG_NAME, cleanSeparators(vfModuleName2 , "VF instance name") + "_vol_abc")
+                    .put(Keys.VNF_NAME2, cleanSeparators(vnfName2, vnfInstanceName2))
+                    .build();
+            registerExpectationFromPresets(ImmutableList.of(
+                    // although "some legacy region" is provided for vnf, Service's region "hvf6" overrides it
+                    PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC,
+                    new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 0, request1),
+                    new PresetMSOCreateServiceInstanceGen2WithNamesEcompNamingFalse(vars, 1, request2)
+            ), SimulatorApi.RegistrationStrategy.APPEND);
+
+            deployAndVerifyModuleInPendingTableMacro(serviceInstanceName, request1, request2);
+            verifyOpenAuditInfo(serviceInstanceName);
+            verifyOpenViewEdit(serviceInstanceName);
+            verifyDeleteJob(serviceInstanceName);
+            verifyHideJob(serviceInstanceName);
+        });
+    }
+
+    @Test
+    @FeatureTogglingTest(FLAG_1902_VNF_GROUPING)
+    public void createNewServiceInstance_aLaCarte_VnfGrouping() {
+
+        String randomAlphabetic = randomAlphabetic(5);
+
+        ServiceData serviceData = new ServiceData(
+                aLaCarteVnfGroupingService.modelVersionId,
+                ImmutableList.of(),
+                false, false, true, false,
+                null, null, 0, 1, ImmutableList.of(), null);
+        prepareServicePreset(aLaCarteVnfGroupingService, false);
+
+        createALaCarteService(serviceData, randomAlphabetic);
+
+        // this is the instance-name that createALaCarteService is using
+        String serviceInstanceName = randomAlphabetic + "instancename";
+
+        final String requestId = PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
+        final String serviceInstanceId = "d2391436-8d55-4fde-b4d5-72dd2cf13cgh";
+        final ImmutableMap<Keys, String> names = ImmutableMap.<Keys, String>builder()
+                .put(Keys.SERVICE_NAME, serviceInstanceName)
+                .build();
+        SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+                new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, requestId, serviceInstanceId, "us16807000"),
+                new PresetAAIPostNamedQueryForViewEdit(serviceInstanceId, serviceInstanceName, false, false)
+        ), SimulatorApi.RegistrationStrategy.APPEND);
+
+        deploy();
+        verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(IN_PROGRESS), false, false);
+        verifyModuleInPendingTable(serviceInstanceName, requestId, null, ImmutableSet.of(COMPLETED), false, true);
+        InstantiationStatusPage.verifyOpenNewViewEdit(serviceInstanceName, serviceInstanceId, aLaCarteVnfGroupingService.modelVersionId, "TYLER SILVIA", "e433710f-9217-458d-a79d-1c7aff376d89", "EDIT");
+    }
+
+    public interface Invoker{
+        void invoke();
+    }
+
+    private void doReduxStep(Map<String, String> reduxStates, String randomAlphabetic, int startInStep, String reduxForStep, MutableInt currentStep, String mode, Invoker todo) {
+        try {
+            switch (mode) {
+                case "DEV":
+                    if (currentStep.getValue() < startInStep) {
+                        // skip up to startInStep
+                        return;
+                    } else if (currentStep.getValue() == startInStep) {
+
+                        setReduxState(reduxForStep);
+
+                        vidBasePage.navigateTo("serviceModels.htm#/servicePlanning?serviceModelId=6b528779-44a3-4472-bdff-9cd15ec93450");
+                        vidBasePage.goToIframe();
+                    }
+
+                    reduxStates.put(String.valueOf(currentStep), getReduxState());
+                    break;
+
+                case "RUNTIME":
+                default:
+                    // log current redux state, before invocation
+                    reduxStates.put(String.valueOf(currentStep), getReduxState());
+                    logger.info("reduxGator runtime reduxState for step {}:\n{}", currentStep, getReduxState());
+                    break;
+            }
+
+            try {
+                todo.invoke();
+            } catch (AssertionError | Exception e) {
+                throw new AssertionError(String.join("\n",
+                        "Current step: " + currentStep,
+                        "Random alphabetic: " + randomAlphabetic,
+                        "Starting reduxState: " + reduxStates.get(String.valueOf(currentStep)),
+                        "Current reduxState:  " + getReduxState()
+                ), e);
+            }
+        } finally {
+            logger.info("Cumulative reduxState: {}", reduxStates);
+            currentStep.increment();
+        }
+    }
+
+    private void duplicateVnf(VnfData vnfData, int count) {
+        hoverAndClickDuplicateButton(extractNodeToEdit(vnfData));
+        vidBasePage.screenshotDeployDialog("duplicateVnf-" + vnfData.vnfName);
+        List<WebElement> options = ((RemoteWebElement)Get.byId("duplicate-select")).findElementsByTagName("option");
+        assertThat(options.stream().map(x -> x.getText()).collect(Collectors.toList()), Matchers.contains("1","2"));
+        SelectOption.byIdAndVisibleText("duplicate-select", String.valueOf(count));
+        Click.byClassAndVisibleText("sdc-button__primary", "DUPLICATE");
+    }
+
+    private String cleanSeparators(String... s) {
+        return String.join("", s).replace(" ", "");
+    }
+
+    private void editVfModuleAndJustSetName(String vfModuleName, String vfModuleUUID) {
+        if (Features.FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD.isActive()) {
+            hoverAndClickEditButton(vfModuleUUID + "-" + vfModuleName);
+        } else {
+            drawingBoardPage.clickAddButtonByNodeName(vfModuleName);
+        }
+        Input.text("VF instance name ZERO", "instanceName");
+        Click.byTestId("form-set");
     }
 
     @Test
     public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfTrue_vgNameFalse() {
-        ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip",
-                "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+        ServiceData serviceData = new ServiceData(
+                macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails.modelVersionId,
                 new ArrayList<>(),
                 false, true, false, true,
-                "2017-488_ADIOD-vPE 0",
-                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", 1, 1, new ArrayList<>());
+                "2017-488_PASQUALE-vPE 0",
+                vfModule0Name, 1, 1, new ArrayList<>(), vfModule0UUID);
+
+        prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails, false);
+
+        final String serviceInstanceName = createSriovService(serviceData, true);
+        createVnf(serviceData, true, true, serviceInstanceName);
+        createVfModule(serviceData, serviceInstanceName, true, false);
 
-        deployServiceInstance(serviceData);
     }
 
     @Test
     public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameFalse() {
-        ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596-vnfEcompNamingFalse.zip",
-                "4a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+        ServiceData serviceData = new ServiceData(
+                macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
                 new ArrayList<>(),
                 false, false, false, false,
-                "2017-488_ADIOD-vPE 0",
-                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", 1, 1, new ArrayList<>());
+                "2017-488_PASQUALE-vPE 0",
+                vfModule0Name, 1, 1, new ArrayList<>(), vfModule0UUID);
+
+        prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
+
+        final String serviceInstanceName = createSriovService(serviceData, true);
+        createVnf(serviceData, true, true, serviceInstanceName);
+        createVfModule(serviceData, serviceInstanceName, true, false);
 
-        deployServiceInstance(serviceData);
     }
 
     @Test
-    public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameTrue() {
-        ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596-vnfEcompNamingFalse.zip",
-                "4a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+    public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameTrue() throws Exception {
+        ServiceData serviceData = new ServiceData(
+                macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse.modelVersionId,
                 new ArrayList<>(),
                 false, false, true, false,
-                "2017-488_ADIOD-vPE 0",
-                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>());
+                "2017-488_PASQUALE-vPE 0",
+                "2017488_PASQUALEvpe0..2017488PASQUALEVpe..PASQUALE_vRE_BV..module-1", 0, 1, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5");
 
-        deployServiceInstance(serviceData);
-    }
+        prepareServicePreset(macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetailsVnfEcompNamingFalse, false);
+
+        final String serviceInstanceName = createSriovService(serviceData, true);
+        createVnf(serviceData, true, true, serviceInstanceName);
+        clickRemoveVfModule(vfModule0UUID, vfModule0Name);
+        createVfModule(serviceData, serviceInstanceName, false, true);
 
-    private void deployServiceInstance(ServiceData serviceData) {
-        deployServiceInstance(serviceData, true);
     }
 
-    private String deployServiceInstance(ServiceData serviceData, boolean tryCancelsAndReentries) {
-        User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP);
 
-        final String serviceInstanceName = createSriovService(
-                user, serviceData.dynamicFields, serviceData.csarName, serviceData.modelUuid,
-                serviceData.isGeneratedNaming, serviceData.multiStageDesign,
-                tryCancelsAndReentries);
+    @Test
+    @FeatureTogglingTest(FLAG_5G_IN_NEW_INSTANTIATION_UI)
+    public void createNewServiceInstance_aLaCarte_validPopupDataAndUI() {
+        String serviceInstanceName = "NcService"+randomAlphabetic(5);
+        String networkInstanceName= "NcNetowrk"+randomAlphabetic(5);
+        String defactoNetworkInstanceName = "ExtVL"+networkInstanceName;
+        BrowseASDCPage browseASDCPage = new BrowseASDCPage();
+        prepareServicePreset(aLaCarteNetworkProvider5G, true);
+        String serviceRequestId = UUID.randomUUID().toString();
+        String networkRequestId = UUID.randomUUID().toString();
+        String requestorID = getUserCredentials().getUserId();
+        registerExpectationFromPresets(
+                ImmutableList.of(
+                    new PresetMSOCreateServiceInstanceAlacarte5GServiceWithNetwork(
+                        ImmutableMap.of(Keys.SERVICE_NAME, serviceInstanceName),
+                        serviceRequestId,
+                            requestorID),
+                    new PresetMSOOrchestrationRequestGet(COMPLETE, serviceRequestId),
+                    PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
+                    new PresetMSOCreateNetworkALaCarte5G(networkRequestId, DEFAULT_SERVICE_INSTANCE_ID, defactoNetworkInstanceName, requestorID),
+                    new PresetMSOOrchestrationRequestGet(COMPLETE, networkRequestId),
+                    new PresetMSOOrchestrationRequestsGet5GServiceInstanceAndNetwork(
+                            new ResponseDetails(serviceInstanceName, serviceRequestId, COMPLETE, "service"),
+                            new ResponseDetails(defactoNetworkInstanceName, networkRequestId, COMPLETE, "network"),
+                            DEFAULT_SERVICE_INSTANCE_ID)
+                ),
+            APPEND
+        );
+        loadServicePopup(aLaCarteNetworkProvider5G.modelVersionId);
+        WebElement instanceNameInput = Get.byId("instanceName");
+        instanceNameInput.sendKeys(serviceInstanceName);
+        VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
+        String serviceType = "TYLER SILVIA";
+        Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
+        browseASDCPage.selectServiceTypeByName(serviceType);
+        SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
+        SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
+        Click.byTestId("form-set");
+        VidBasePage.goOutFromIframe();
+        browseASDCPage.goToIframe();
+        VnfData networkData = new VnfData("SR-IOV Provider-1", "840ffc47-e4cf-46de-8e23-525fd8c6fdc3", defactoNetworkInstanceName, false);
+        createNetwork(networkData, false, false, serviceInstanceName);
+        drawingBoardPage.clickDeployButton();
 
-        createVnf(serviceData.vnfData.isGeneratedNaming, serviceData.vnfData.vnfName, serviceInstanceName, tryCancelsAndReentries);
+        VidBasePage.goOutFromIframe();
+        GeneralUIUtils.ultimateWait();
+        vidBasePage.goToIframe();
+        GeneralUIUtils.ultimateWait();
 
-        createVfModule(
-                serviceData.vfData.vfName, serviceData.vnfData.isGeneratedNaming,
-                serviceData.vfData.vgEnabled, serviceData.vfData.vfMin, serviceData.vfData.vfMax,
-                serviceData.vfData.dynamicFields, serviceInstanceName);
+        DrawingBoardPage.ServiceStatusChecker serviceStatusChecker = new DrawingBoardPage.ServiceStatusChecker(serviceInstanceName, Collections.singleton(COMPLETED));
+        boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2);
+        assertTrue("service "+serviceInstanceName+" wasnt completed after in time", statusIsShown);
 
-        return serviceInstanceName;
+        VidBasePage.goOutFromIframe();
     }
 
-
     @Test
-    public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingTrue() {
+    public void createNewServiceInstance_macro_validPopupDataAndUI() {
 
-        List<String> serviceDynamicFields = Arrays.asList("2017488 adiodvpe0 asn:");
-        ServiceData serviceData = new ServiceData("csar-withDynamicFields-ecompNamingTrue-partialModelDetails.zip",
-                "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+        List<String> serviceDynamicFields = Arrays.asList("2017488 PASQUALEvpe0 asn:");
+        ServiceData serviceData = new ServiceData(
+                macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails.modelVersionId,
                 serviceDynamicFields,
-                true, true, false, false,
-                "2017-488_ADIOD-vPE 0",
-                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>());
+                true, true, true, false,
+                "2017-488_PASQUALE-vPE 0",
+                "2017488_PASQUALEvpe0..2017488PASQUALEVpe..PASQUALE_vRE_BV..module-1", 0, 1, new ArrayList<>(), "25284168-24bb-4698-8cb4-3f509146eca5");
 
-        deployServiceInstance(serviceData);
+        prepareServicePreset(macroSriovWithDynamicFieldsEcompNamingTruePartialModelDetails, false);
+
+        final String serviceInstanceName = createSriovService(serviceData, true);
+        createVnf(serviceData, true, true, serviceInstanceName);
+        clickRemoveVfModule(vfModule0UUID, vfModule0Name);
+        createVfModule(serviceData, serviceInstanceName, false, false);
 
     }
 
-    private void deployAndVerifyModuleInPendingTable(String serviceInstanceName) {
-        drawingBoardPage.clickDeployButton();
+    private void deployAndVerifyModuleInPendingTableMacro(String serviceInstanceName, String requestId1, String requestId2) {
+        deploy();
 
         boolean simulatorUpdated = false;
 
-        vidBasePage.goToIframe();
-        GeneralUIUtils.ultimateWait();
-        int[] ids = {1, 1, 2, 3};
-        String[] statuses = {"IN_PROGRESS", "COMPLETED", "IN_PROGRESS", "PENDING"};
+        int[] ids = {0, 0, 1, 2};
+        String[] statuses = {IN_PROGRESS, COMPLETED, IN_PROGRESS, PENDING};
         for (int i = 0; i < ids.length; i++) {
             String actualInstanceName = getActualInstanceName(serviceInstanceName, ids[i], statuses[i]);
+            verifyModuleInPendingTable(actualInstanceName, requestId1, requestId2, ImmutableSet.of(statuses[i]), true, simulatorUpdated);
+            simulatorUpdated = true;
+        }
+        vidBasePage.screenshotDeployDialog(serviceInstanceName);
+    }
+
+    private void deploy() {
+        try {
+            logger.info("Redux state before deploy:");
+            logger.info(getReduxState());
+        }
+        catch (Exception e) {
+            //do nothing just logging
+        }
+        drawingBoardPage.clickDeployButton();
+
+        VidBasePage.goOutFromIframe();
+        GeneralUIUtils.ultimateWait();
+        vidBasePage.goToIframe();
+        GeneralUIUtils.ultimateWait();
+    }
 
-            final Set<String> expectedStatuses = ImmutableSet.of(statuses[i]);
-            ServiceStatusChecker serviceStatusChecker = new ServiceStatusChecker(actualInstanceName, expectedStatuses);
-            boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2);
-            final String assertionMessage = String.format("service %s: none of rowClasses [%s] is in expectedStatuses: [%s]  ",
-                    actualInstanceName,
-                    String.join(",", serviceStatusChecker.getColumnClassesSet()),
-                    String.join(",", expectedStatuses));
+    private void verifyModuleInPendingTable(String serviceInstanceName, String requestId1, String requestId2, Set<String> expectedStatuses, boolean isMacro, boolean simulatorUpdated) {
+        DrawingBoardPage.ServiceStatusChecker serviceStatusChecker = new DrawingBoardPage.ServiceStatusChecker(serviceInstanceName, expectedStatuses);
+        boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2);
+        final String assertionMessage = String.format("service %s: none of rowClasses [%s] is in expectedStatuses: [%s]  ",
+                serviceInstanceName,
+                String.join(",", serviceStatusChecker.getColumnClassesSet()),
+                String.join(",", expectedStatuses));
 
-            assertTrue(assertionMessage, statusIsShown);
+        assertTrue(assertionMessage, statusIsShown);
 
+        if (isMacro) {
             InstantiationStatusPage.assertInstantiationStatusRow(
-                    actualInstanceName, expectedRowFields(actualInstanceName));
-
-            if (!simulatorUpdated) {
-                simulatorUpdated = true;
-                final String request1 = PresetMSOBaseCreateServiceInstancePost.DEFAULT_REQUEST_ID;
-                final String request2 = "ce010256-3fdd-4cb5-aed7-37112a2c6e93";
-                SimulatorApi.registerExpectationFromPreset(new PresetMSOCreateServiceInstanceGen2(request2), APPEND);
-                SimulatorApi.registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("IN_PROGRESS", request2), APPEND);
-                SimulatorApi.registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("COMPLETE", request1), APPEND);
+                    serviceInstanceName, expectedRowFields(serviceInstanceName));
+        } else {
+            InstantiationStatusPage.assertInstantiationStatusRow(
+                    serviceInstanceName, expectedALaCarteRowFields(serviceInstanceName));
+        }
+
+        if (!simulatorUpdated) {
+            if (requestId2 != null) {
+                registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet(IN_PROGRESS, requestId2), APPEND);
             }
+            registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("COMPLETE", requestId1), APPEND);
         }
         vidBasePage.screenshotDeployDialog(serviceInstanceName);
     }
 
     private String getActualInstanceName(String serviceInstanceName, Integer i, String status) {
-        return "PENDING".equals(status) ? serviceInstanceName : serviceInstanceName + "_00" + i;
+        return i==0 ? serviceInstanceName : serviceInstanceName + "_00" + i;
     }
 
     private void verifyOpenViewEdit(String serviceInstanceName) {
         boolean[] openEnabled = {true, false, false};
-        String[] statuses = {"COMPLETED", "IN_PROGRESS", "PENDING"};
-        ImmutableList.of(1, 2, 3).forEach(i -> {
-            String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i - 1]);
-            checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_OPEN_ITEM, openEnabled[i - 1], contextMenuOpen -> {
-                Click.byTestId(contextMenuOpen);
-                vidBasePage.goOutFromIframe();
-                GeneralUIUtils.ultimateWait();
-
-                Wait.byText("View/Edit Service Instance");
-                Wait.byText("Add node instance");
-                Wait.byText("i'm a port");
-                Wait.byText("f8791436-8d55-4fde-b4d5-72dd2cf13cfb");
-
-                vidBasePage.screenshotDeployDialog("view-edit-" + actualInstanceName);
-                SideMenu.navigateToMacroInstantiationStatus();
-            });
+        String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
+        ImmutableList.of(0, 1, 2).forEach(i -> {
+            String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i]);
+            if (Features.FLAG_1902_NEW_VIEW_EDIT.isActive()) {
+                InstantiationStatusPage.verifyOpenNewViewEdit(actualInstanceName, openEnabled[i], "EDIT");
+            }
+            else {
+                vidBasePage.verifyOpenOldViewEdit(actualInstanceName, null, openEnabled[i], true, true);
+            }
         });
     }
 
-
     private void verifyOpenAuditInfo(String serviceInstanceName) {
         boolean auditInfoEnabled = true;
-        String[] statuses = {"COMPLETED", "IN_PROGRESS", "PENDING"};
-        for (Integer i : ImmutableList.of(1, 2, 3)) {
-            String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i - 1]);
-            checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM, auditInfoEnabled, contextMenuOpen -> {
+        String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
+        for (Integer i : ImmutableList.of(0, 1, 2)) {
+            String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i]);
+            InstantiationStatusPage.checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM, auditInfoEnabled, contextMenuOpen -> {
                 Click.byTestId(contextMenuOpen);
                 checkAuditInfoModal(actualInstanceName, i, statuses);
             });
             final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName);
-            row.findElement(By.id(Constants.InstantiationStatus.TD_JOB_STATUS_ICON + "-" + (i - 1))).click();
+            row.findElement(By.id(Constants.InstantiationStatus.TD_JOB_STATUS_ICON + "-" + (i))).click();
             checkAuditInfoModal(actualInstanceName, i, statuses);
         }
     }
@@ -294,16 +671,16 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
                         convertUITextCapitalizeAndFormatPipe(s.getText()))
                 .collect(Collectors.toList());
 
-        List<String> serviceStatus = Arrays.asList(Arrays.copyOfRange(statuses, i - 1, statuses.length));
+        List<String> serviceStatus = Arrays.asList(Arrays.copyOfRange(statuses, i, statuses.length));
         assertThat("statuses for " + actualInstanceName + " must be as expected", vidStatuses, is(Lists.reverse(serviceStatus)));
 
         String dateString = vidTableElement.findElements(By.id("vidStatusTime")).get(0).getText();
         assertTrue("vid Status Time column must contains valid date in format : MMM dd, yyyy HH:mm", isDateValid(dateString, "MMM dd, yyyy HH:mm"));
 
         WebElement MSOTableElement = Get.byId("service-instantiation-audit-info-mso");
-        assertEquals(4, MSOTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "MSO table must contain 4 columns");
+        assertEquals(3, MSOTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "MSO table must contain 3 columns");
 
-        if (statuses[i - 1].equals("PENDING")) {
+        if (statuses[i].equals(PENDING)) {
             assertEquals(0, MSOTableElement.findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(), "When status is PENDING MSO table is empty");
         }
 
@@ -335,20 +712,20 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
 
     private void verifyDeleteJob(String serviceInstanceName) {
         boolean[] deleteEnabled = {false, false, true};
-        String[] statuses = {"COMPLETED", "IN_PROGRESS", "PENDING"};
-        verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_DELETE, statuses, deleteEnabled, "deleted");
+        String[] statuses = {COMPLETED, IN_PROGRESS, PENDING};
+        verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE, statuses, deleteEnabled, "deleted");
     }
 
     private void verifyHideJob(String serviceInstanceName) {
         boolean[] hideEnabled = {true, false};
-        String[] statuses = {"COMPLETED", "IN_PROGRESS"};
+        String[] statuses = {COMPLETED, IN_PROGRESS};
         verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HIDE, statuses, hideEnabled, "hidden");
     }
 
     private void verifyDeleteOrHideOperation(String serviceInstanceName, String contextMenuItem, String[] statuses, boolean[] operationEnabled, String operationName) {
-        for (int i = 1; i <= statuses.length; i++) {
-            String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i - 1]);
-            checkMenuItem(actualInstanceName, contextMenuItem, operationEnabled[i - 1], contextMenuDelete -> {
+        for (int i = 0; i < statuses.length; i++) {
+            String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i]);
+            InstantiationStatusPage.checkMenuItem(actualInstanceName, contextMenuItem, operationEnabled[i], contextMenuDelete -> {
                 Click.byTestId(contextMenuDelete);
                 GeneralUIUtils.ultimateWait();
                 assertNull(actualInstanceName + " should be " + operationName,
@@ -358,114 +735,117 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
         vidBasePage.screenshotDeployDialog(serviceInstanceName);
     }
 
-    private void checkMenuItem(String actualInstanceName, String contextMenuItem, boolean shouldBeEnabled, Consumer<String> doIfEnabled) {
-        Wait.waitFor(name -> {
-            if (null == InstantiationStatusPage.getInstantiationStatusRow(name)) {
-                InstantiationStatusPage.clickRefreshButton();
-                return false;
-            } else {
-                return true;
-            }
-        }, actualInstanceName, 8, 1);
-        final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName);
-        row.findElement(By.className("menu-div")).click();
-        String clazz = Get.byXpath("//div[@data-tests-id='" + contextMenuItem + "']/ancestor::li").getAttribute("class");
-        assertThat("item " + contextMenuItem + " of " + actualInstanceName +
-                " should be " + (shouldBeEnabled ? "enabled" : "disabled"), !clazz.equals("disabled"), is(shouldBeEnabled));
-        if (shouldBeEnabled) {
-            doIfEnabled.accept(contextMenuItem);
-        } else {
-            // dismiss menu
-            Get.byClass("title").get(0).click();
-        }
-    }
-
     private ImmutableMap<String, String> expectedRowFields(String actualInstanceName) {
         return ImmutableMap.<String, String>builder()
                 .put("userId", getUserCredentials().getUserId())
                 .put("serviceModelName", "action-data")
                 .put("serviceInstanceName", actualInstanceName)
                 .put("serviceModelVersion", "1.0")
-                .put("subscriberName", "USP VOICE")
-                .put("serviceType", "VIRTUAL USP")
-                .put("regionId", "mtn6")
-                .put("tenantName", "AIN Web Tool-15-D-testgamma")
+                .put("subscriberName", "SILVIA ROBBINS")
+                .put("serviceType", "TYLER SILVIA")
+                .put("regionId", "hvf6")
+                .put("tenantName", "AIN Web Tool-15-D-testalexandria")
                 .put("aicZoneName", "NFTJSSSS-NFT1")
-                .put("project", "DFW")
-                .put("owningEntityName", "MetroPacketCore")
+                .put("project", "WATKINS")
+                .put("owningEntityName", "WayneHolland")
+                .put("pause", "false")
+                .build();
+    }
+
+    private ImmutableMap<String, String> expectedALaCarteRowFields(String actualInstanceName) {
+        return ImmutableMap.<String, String>builder()
+                .put("userId", getUserCredentials().getUserId())
+                .put("serviceModelName", "Grouping Service for Test")
+                .put("serviceInstanceName", actualInstanceName)
+                .put("serviceModelVersion", "1.0")
+                .put("subscriberName", "SILVIA ROBBINS")
+                .put("serviceType", "TYLER SILVIA")
+                .put("project", "WATKINS")
+                .put("owningEntityName", "WayneHolland")
                 .put("pause", "false")
                 .build();
     }
 
-    private String createSriovService(User user, List<String> serviceDynamicFields,
-                                      String csarName, String modelId, boolean modelWithGeneratedName,
-                                      boolean multiStageDesign, boolean tryCancelsAndReentries) {
+    private String createSriovService(ServiceData serviceData, boolean tryCancelsAndReentries) {
+        return createSriovService(serviceData, tryCancelsAndReentries, randomAlphabetic(5));
+    }
+
+    private String createSriovService(ServiceData serviceData, boolean tryCancelsAndReentries, String randomAlphabetic) {
         BrowseASDCPage browseASDCPage = new BrowseASDCPage();
+        User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
 
         // simulate typing with spaces, but expected is without spaces
-        String serviceInstanceNameWithSpaces = RandomStringUtils.randomAlphabetic(5) + " instance name";
-        String serviceInstanceName = serviceInstanceNameWithSpaces.replace(" ", "");
+        String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
+        String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
 
         List<String> cycles = tryCancelsAndReentries ? ImmutableList.of("WILL_CANCEL", "AFTER_CANCEL") : ImmutableList.of("SINGLE_SHOT");
         cycles.forEach(cycle -> {
             if ("AFTER_CANCEL".equals(cycle)) {
-                loadServicePopupOnBrowseASDCPage(modelId);
+                loadServicePopupOnBrowseASDCPage(serviceData.modelUuid);
             } else {
-                loadServicePopup(csarName, modelId);
+                loadServicePopup(serviceData.modelUuid);
             }
 
-            WebElement instanceName = Get.byId("instance-name");
-            if (modelWithGeneratedName) {
-                Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true.");
+            WebElement instanceName = Get.byId("instanceName");
+            boolean isRequired = isElementByIdRequired("instanceName-label");
+            if (serviceData.isGeneratedNaming) {
+                Assert.assertNotNull(instanceName, "instance name input should be visible when serviceEcompNaming == true.");
+                Assert.assertFalse(isRequired,"instance name input should be optional when ecompNaming == true.");
+
             } else {
-                instanceName.sendKeys(serviceInstanceNameWithSpaces);
+                Assert.assertTrue(isRequired,"instance name input should be required when serviceEcompNaming == false.");
+                instanceName.sendKeys(serviceInstanceName);
             }
 
             //serviceType should be dependent on subscriber selection
-            assertElementDisabled("service-type-select");
-
-            GeneralUIUtils.ultimateWait();
-            assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
-            VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
+            assertElementDisabled("serviceType-select");
+            Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
             GeneralUIUtils.ultimateWait();
+            Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
+            if (Features.FLAG_RESTRICTED_SELECT.isActive())
+                assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
+            else{
+                assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
 
+            }
+            VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
             //lcpRegion should be dependent on serviceType selection
             assertElementDisabled("lcpRegion-select");
 
-            String serviceType = "VIRTUAL USP";
+            String serviceType = "TYLER SILVIA";
             Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
             browseASDCPage.selectServiceTypeByName(serviceType);
 
             //tenant should be dependent on lcpRegion selection
             assertElementDisabled("tenant-select");
 
-            String lcpRegion = "mtn6";
+            String lcpRegion = "hvf6";
             Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30);
-            browseASDCPage.selectLcpRegion(lcpRegion);
+            viewEditPage.selectLcpRegion(lcpRegion, AIC);
 
+            GeneralUIUtils.ultimateWait();
             browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054");
 
-            String setButtonTestId = "service-form-set";
+            String setButtonTestId = "form-set";
             assertSetButtonDisabled(setButtonTestId);
 
-            SelectOption.byTestIdAndVisibleText("MetroPacketCore", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
+            SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
             assertSetButtonDisabled(setButtonTestId);
 
-            SelectOption.byTestIdAndVisibleText("DHV", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
+            SelectOption.byTestIdAndVisibleText("ERICA", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID);
             assertSetButtonEnabled(setButtonTestId);
 
             browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89");
 
-            assertAllIsPermitted(Constants.BrowseASDC.AIC_OPTION_CLASS);
             browseASDCPage.selectAicZone("NFT1");
 
-            SelectOption.byTestIdAndVisibleText("DFW", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
+            SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
 
             assertNotificationAreaVisibilityBehaviour();
 
-            assertPauseOnPausePointsVisibility(multiStageDesign);
+            assertPauseOnPausePointsVisibility(serviceData.multiStageDesign);
 
-            validateDynamicFields(serviceDynamicFields);
+            validateDynamicFields(serviceData.dynamicFields);
 
             vidBasePage.screenshotDeployDialog("createSriovService-" + serviceInstanceName);
 
@@ -475,7 +855,7 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
                 Click.byTestId(setButtonTestId);
             }
 
-            browseASDCPage.goOutFromIframe();
+            VidBasePage.goOutFromIframe();
 
             browseASDCPage.goToIframe();
 
@@ -483,112 +863,268 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
         return serviceInstanceName;
     }
 
-    private void createVnf(boolean isInstanceNameGenerated, String vnfName, String serviceInstanceName, boolean tryCancelsAndReentries) {
+    private String createALaCarteService(ServiceData serviceData, String randomAlphabetic) {
         BrowseASDCPage browseASDCPage = new BrowseASDCPage();
-        drawingBoardPage.clickAddButtonByNodeName(vnfName);
+        User user = usersService.getUser(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA);
+
+        // simulate typing with spaces, but expected is without spaces
+        String serviceInstanceNameWithSpaces = randomAlphabetic + " instance name";
+        String serviceInstanceName = cleanSeparators(serviceInstanceNameWithSpaces);
+
+        loadServicePopup(serviceData.modelUuid);
 
-        if (isInstanceNameGenerated) {
-            WebElement instanceName = Get.byId("instance-name");
+        WebElement instanceName = Get.byId("instanceName");
+        if (serviceData.isGeneratedNaming) {
             Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true.");
         } else {
-            Input.text("VNF instance name", "instanceName");
+            instanceName.sendKeys(serviceInstanceName);
+        }
+
+        //serviceType should be dependent on subscriber selection
+        assertElementDisabled("serviceType-select");
+        Wait.waitByClassAndText(Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS, "SILVIA ROBBINS", 30);
+        GeneralUIUtils.ultimateWait();
+        Click.byTestId(Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID);
+        if (Features.FLAG_RESTRICTED_SELECT.isActive())
+            assertElementExistAccordingTagNameAndTestId("select", Constants.SUBSCRIBER_SELECT_ID);
+        else{
+            assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS);
+
+        }
+        VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89");
+
+        String serviceType = "TYLER SILVIA";
+        Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30);
+        browseASDCPage.selectServiceTypeByName(serviceType);
+
+        String setButtonTestId = "form-set";
+        assertSetButtonDisabled(setButtonTestId);
+
+        SelectOption.byTestIdAndVisibleText("WayneHolland", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID));
+
+        SelectOption.byTestIdAndVisibleText("WATKINS", Constants.OwningEntity.PROJECT_SELECT_TEST_ID);
+
+        validateDynamicFields(serviceData.dynamicFields);
+
+        vidBasePage.screenshotDeployDialog("createALaCarteService-" + serviceInstanceName);
+
+        Click.byTestId(setButtonTestId);
+
+        VidBasePage.goOutFromIframe();
+
+        browseASDCPage.goToIframe();
+
+        return serviceInstanceName;
+    }
+
+    private void assertElementExistAccordingTagNameAndTestId(String tag, String testId) {
+        WebElement webElement = Get.byId(testId);
+        Assert.assertEquals(webElement.getTagName(), tag);
+    }
+
+    private void createVnf(ServiceData serviceData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName) {
+        createVnf(serviceData.vnfData, tryCancelsAndReentries, addedByDefault, serviceInstanceName);
+    }
+
+    private void createNetwork(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName) {
+        createVnf(vnfData, tryCancelsAndReentries, addedByDefault, serviceInstanceName, true);
+    }
+
+    private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName) {
+        createVnf(vnfData, tryCancelsAndReentries, addedByDefault, serviceInstanceName, false);
+    }
+
+    private void createVnf(VnfData vnfData, boolean tryCancelsAndReentries, boolean addedByDefault, String serviceInstanceName, boolean isNetwork) {
+        BrowseASDCPage browseASDCPage = new BrowseASDCPage();
+
+        String nodeToEdit = extractNodeToEdit(vnfData);
+        if (addedByDefault && Features.FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD.isActive()) {
+            hoverAndClickEditButton(nodeToEdit);
+        } else {
+            drawingBoardPage.clickAddButtonByNodeName(vnfData.vnfName);
+        }
+
+        GeneralUIUtils.ultimateWait();
+
+        if (vnfData.isGeneratedNaming) {
+            Assert.assertFalse(isElementByIdRequired("instanceName-label") ,"instance name input should be optional when EcompNaming == true, and required when false.");
+        } else {
+            Input.text(vnfData.vnfInstanceName, "instanceName");
         }
 
+
         //tenant should be dependent on lcpRegion selection
         assertElementDisabled("tenant-select");
 
         WebElement legacyRegion = Get.byTestId("lcpRegionText");
-        Assert.assertNull(legacyRegion, "legacy region shouldn't be visible when lcp region isn't AAIAIC25,rdm3 or rdm5a.");
+        Assert.assertNull(legacyRegion, "legacy region shouldn't be visible when lcp region isn't JANET25,olson3 or olson5a.");
 
-        browseASDCPage.selectLcpRegion("AAIAIC25");
+        browseASDCPage.selectLcpRegion("JANET25");
 
         legacyRegion = Get.byTestId("lcpRegionText");
-        Assert.assertNotNull(legacyRegion, "legacy region should be visible when lcp region is AAIAIC25,rdm3 or rdm5a.");
+        Assert.assertNotNull(legacyRegion, "legacy region should be visible when lcp region is JANET25,olson3 or olson5a.");
 
         browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e86");
 
-        String setButtonTestId = "vnf-form-set";
-        assertSetButtonDisabled(setButtonTestId);
+        assertSetButtonDisabled(VNF_SET_BUTTON_TEST_ID);
 
         browseASDCPage.selectPlatform("platform");
 
-        assertSetButtonEnabled(setButtonTestId);
+        assertSetButtonEnabled(VNF_SET_BUTTON_TEST_ID);
 
         browseASDCPage.setLegacyRegion("some legacy region");
-        browseASDCPage.selectLineOfBusiness("ECOMP");
+        browseASDCPage.selectLineOfBusiness("ONAP");
 
         Wait.waitByTestId("model-item-value-subscriberName", 10);
-        Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "USP VOICE", "Subscriber name should be shown in vf module");
+        Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
         Assert.assertEquals(Get.byTestId("model-item-value-min"), null, "Min value should not be shown in VNF popup");
         Assert.assertEquals(Get.byTestId("model-item-value-max"), null, "Max value should not be show in VNF popup");
-        if (!isInstanceNameGenerated) {
+        if (!vnfData.isGeneratedNaming) {
             Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Subscriber name should be shown in vf module");
         }
 
         vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName);
-        Click.byTestId(setButtonTestId);
-
-        String nodeToEdit = "69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_ADIOD-vPE 0";
+        Click.byTestId(VNF_SET_BUTTON_TEST_ID);
+        if (isNetwork) {
+            return;
+        }
         if (tryCancelsAndReentries) {
             hoverAndClickEditButton(nodeToEdit);
 
-            Wait.byText("VIRTUAL USP");
+            Wait.byText("TYLER SILVIA");
             GeneralUIUtils.ultimateWait();
-            Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), "AAIAIC25");
+            assertThat(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), startsWith("JANET25"));
             Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.TENANT_SELECT_TESTS_ID), "USP-SIP-IC-24335-T-01");
-            Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID), "ECOMP");
+            Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID), "ONAP");
             Assert.assertEquals(Get.selectedOptionText(Constants.OwningEntity.PLATFORM_SELECT_TEST_ID), "platform");
             Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID);
+            GeneralUIUtils.ultimateWait();
         } else {
-            toggleItemInTree(nodeToEdit);
+            toggleItemInTree(Constants.DrawingBoard.AVAILABLE_MODELS_TREE);
         }
+        Click.byTestId("node-" + nodeToEdit);
+    }
+
+    private String extractNodeToEdit(VnfData vnfData) {
+        return vnfData.vnfUuid + "-" + vnfData.vnfName;
     }
 
-    private void toggleItemInTree(String nodeToEdit) {
-        Click.byXpath("//tree-root[@data-tests-id='" + Constants.DrawingBoard.AVAILABLE_MODELS_TREE + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']");
+
+    private void toggleItemInTree(String tree) {
+        Click.byXpath("//tree-root[@data-tests-id='" + tree + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']");
     }
 
     private void hoverAndClickEditButton(String nodeToEdit) {
-        String buttonOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON;
+        hoverAndClickButton(nodeToEdit, Constants.DrawingBoard.CONTEXT_MENU_EDIT);
+    }
+
+    private void hoverAndClickDeleteButton(String nodeToEdit) {
+        hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_REMOVE);
+    }
+
+    private void hoverAndClickDuplicateButton(String nodeToEdit) {
+        hoverAndClickButton(nodeToEdit, Constants.InstantiationStatus.CONTEXT_MENU_DUPLICATE);
+    }
+    private void hoverAndClickButton(String nodeToEdit, String contextMenuItem) {
+        String nodeOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit;
+        String buttonOfEdit = nodeOfEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON;
         GeneralUIUtils.hoverOnAreaByTestId(buttonOfEdit);
         Click.byTestId(buttonOfEdit);
-        Click.byTestId(Constants.DrawingBoard.CONTEXT_MENU_ITEM);
+        Click.byTestId(contextMenuItem);
     }
 
-    private void createVfModule(String vfModuleName, boolean isInstanceNameGenerated, boolean vgEnabled, int vgMin,
-                                int vgMax, List<String> vfModuleDynamicFields, String serviceInstanceName) {
-        String setButtonTestId = "vnf-form-set";
+    private void uploadSupplementaryFile(String inputFileName, boolean isValid, BrowseASDCPage browseASDCPage, String setButtonTestId) {
+        if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
+            GeneralUIUtils.ultimateWait();
+            Input.file("supplementaryFiles/" + inputFileName, "supplementaryFile");
+            GeneralUIUtils.ultimateWait();
+            WebElement fileName = Get.byTestId("file-name");
+            Assert.assertEquals(fileName.getText(),inputFileName);
+            browseASDCPage.assertButtonState(setButtonTestId, isValid);
+        }
+    }
+
+    private void deleteSupplementaryFile() {
+        if (Features.FLAG_SUPPLEMENTARY_FILE.isActive()) {
+            Click.byTestId("remove-uploaded-file");
+            GeneralUIUtils.ultimateWait();
+            WebElement fileName = Get.byTestId("file-name");
+            Assert.assertEquals(fileName.getText(),"Choose file");
+        }
+    }
+
+    private void createVfModule(ServiceData serviceData, String serviceInstanceName, boolean addedByDefault, boolean addOpensPopup) {
+        clickAddVfModule(serviceData, addedByDefault);
+        if (!addOpensPopup) {
+            clickEditVfModule(serviceData);
+        }
+        fillAndSetVfModulePopup(serviceData, serviceInstanceName);
+    }
+
+    private void fillAndSetVfModulePopup(ServiceData serviceData, String serviceInstanceName) {
+        String setButtonTestId = "form-set";
         BrowseASDCPage browseASDCPage = new BrowseASDCPage();
-//        Click.byTestId(Constants.DrawingBoard.NODE_PREFIX + vnfName);
-        drawingBoardPage.clickAddButtonByNodeName(vfModuleName);
-        if (!isInstanceNameGenerated) {
-            Input.text("VF instance name", "instanceName");
-        } else {
-            Assert.assertNull(Get.byTestId("instanceName"));
-            Assert.assertNull(Get.byTestId("volumeGroupName"));
 
+        Assert.assertEquals(isElementByIdRequired("instanceName-label"), !serviceData.vnfData.isGeneratedNaming,"instance name input should be optional when EcompNaming == true, and required when false.");
+
+        if (!serviceData.vnfData.isGeneratedNaming) {
+            Input.text("VF instance name", "instanceName");
         }
-        if (vgEnabled && !isInstanceNameGenerated) {
-            browseASDCPage.setInputText("volumeGroupName", "some group name name");
+
+        if (serviceData.vfData.vgEnabled) {
+            browseASDCPage.setInputText("volumeGroupName", "_abc");
+            Assert.assertEquals(isElementByIdRequired("volumeGroupName-label"), false,  "volume Group name input should be always optional");
         } else {
             Assert.assertNull(Get.byTestId("volumeGroupName"), "volumeGroupName input should be invisible when vgEnabled == false");
         }
         Wait.waitByTestId("model-item-value-subscriberName", 10);
-        Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "USP VOICE", "Subscriber name should be shown in vf module");
-        Assert.assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(vgMin), "Min should be shown");
-        Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), Integer.toString(vgMax), "Max should be shown");
-        if (!isInstanceNameGenerated) {
+        Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "SILVIA ROBBINS", "Subscriber name should be shown in vf module");
+        Assert.assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(serviceData.vfData.vfMin), "Min should be shown");
+        Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), Integer.toString(serviceData.vfData.vfMax), "Max should be shown");
+        if (!serviceData.vnfData.isGeneratedNaming) {
             Wait.byText(serviceInstanceName);
             Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Service name should be shown in vf module");
         }
-        validateDynamicFields(vfModuleDynamicFields);
+        validateDynamicFields(serviceData.vfData.dynamicFields);
+
+        uploadSupplementaryFile("invalid-file.json", false, browseASDCPage, setButtonTestId);
+        deleteSupplementaryFile();
+        uploadSupplementaryFile("sample.json", true, browseASDCPage, setButtonTestId);
 
         browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName);
         Click.byTestId(setButtonTestId);
     }
 
+    private void clickEditVfModule(ServiceData serviceData) {
+        if (Features.FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD.isActive()) {
+            hoverAndClickEditButton(serviceData.vfData.uuid + "-" + serviceData.vfData.vfName);
+        }
+    }
+
+    private void clickAddVfModule(ServiceData serviceData, boolean addedByDefault) {
+        if (Features.FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD.isActive() && addedByDefault) {
+            return;
+        }
+        System.out.println("VFModule should be added 'manually'");
+
+        final WebElement vfModuleNode = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + serviceData.vfData.vfName);
+
+        if (vfModuleNode == null || !vfModuleNode.isDisplayed()) {
+            // expand tree
+            drawingBoardPage.clickNode(serviceData.vnfData.vnfName);
+        }
+        drawingBoardPage.clickAddButtonByNodeName(serviceData.vfData.vfName);
+    }
+
+    private void clickRemoveVfModule(String vfModuleId, String vfModuleName) {
+        if (Features.FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD.isActive()) {
+            System.out.println("will remove " + vfModule0Name);
+            hoverAndClickDeleteButton(vfModuleId + "-" + vfModuleName);
+        }
+    }
+
     private void assertPauseOnPausePointsVisibility(boolean visibility) {
-        WebElement pauseElem = Get.byId("pause");
+        WebElement pauseElem = Get.byId("Pause");
         final String assertionMessage = "pause on pause points visibility should be " + visibility;
         if (visibility) {
             Assert.assertNotNull(pauseElem, assertionMessage);
@@ -607,121 +1143,71 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest {
         Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty.");
     }
 
-    /**
-     * following are two popup service models that represent two opposite/extreme states of the popup.
-     * they should be enough to test all the possible popup states.
-     */
-    private void loadMacroServicePopup_withDynamicFields_partialModelDetails_ecompNamingTrue() {
-        loadServicePopup("csar-withDynamicFields-ecompNamingTrue-partialModelDetails.zip", "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd");
-    }
-
-    private void loadMacroServicePopup_noDynamicFields_fullModelDetails_ecompNamingFalse() {
-        loadServicePopup("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip", "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd");
-    }
-
-    @DataProvider
-    private Object[][] createSriovService(
-    ) {
-        List<String> dynamicFields = Arrays.asList(
-                "2017488 adiodvpe0 VNF config template version:",
-                "Adiodvpe0 bandwidth units:",
-                "Adiodvpe0 bandwidth:",
-                "2017488 adiodvpe0 aic clli:",
-                "2017488 adiodvpe0 asn:",
-                "2017488 adiodvpe0 VNF instance name");
-        ServiceData withEcompNaming = new ServiceData("csar-withDynamicFields-ecompNamingTrue-partialModelDetails.zip",
-                "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
-                dynamicFields,
-                true, true, true, false,
-                "2017-488_ADIOD-vPE 0",
-                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>());
-        return new Object[][]{{withEcompNaming}};
-    }
+    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);
+        }
+    }
 
     private class ServiceData {
-
-        public ServiceData(String csarName, String modelUuid, List<String> dynamicFields, boolean isServiceGeneratedNaming, boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName, String vfName, int vfMin, int vfMax, List<String> vfModuleDynamicFields) {
-            this.csarName = csarName;
+        ServiceData(String modelUuid, List<String> dynamicFields, boolean isServiceGeneratedNaming, boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName, String vfName, int vfMin, int vfMax, List<String> vfModuleDynamicFields, String vfVersionId) {
             this.modelUuid = modelUuid;
             this.dynamicFields = dynamicFields;
             this.isGeneratedNaming = isServiceGeneratedNaming;
             this.multiStageDesign = multiStageDesign;
-            this.vnfData = new VnfData(vnfName, isVnfGeneratedNaming);
-            this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields);
+            this.vnfData = new VnfData(vnfName, "69e09f68-8b63-4cc9-b9ff-860960b5db09", "VNF instance name", isVnfGeneratedNaming);
+            this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields, vfVersionId);
         }
 
-        public String csarName;
-        public String modelUuid;
-        public List<String> dynamicFields;
-        public boolean isGeneratedNaming;
-        public boolean multiStageDesign;
-        public VnfData vnfData;
-        public VfData vfData;
-
+        final String modelUuid;
+        final List<String> dynamicFields;
+        final boolean isGeneratedNaming;
+        final boolean multiStageDesign;
+        final VnfData vnfData;
+        final VfData vfData;
     }
 
     private class VnfData {
-
-        public VnfData(String vnfName, boolean isGeneratedNaming) {
+        VnfData(String vnfName, String vnfUuid, String vnfInstanceName, boolean isGeneratedNaming) {
             this.vnfName = vnfName;
+            this.vnfUuid = vnfUuid;
+            this.vnfInstanceName = vnfInstanceName;
             this.isGeneratedNaming = isGeneratedNaming;
         }
 
-        public String vnfName;
-        public boolean isGeneratedNaming;
+        final String vnfName;
+        final String vnfUuid;
+        final String vnfInstanceName;
+        final boolean isGeneratedNaming;
     }
 
 
     private class VfData {
-        public VfData(String vfName, boolean vgEnabled, int vfMin, int vfMax, List<String> dynamicFields) {
+        VfData(String vfName, boolean vgEnabled, int vfMin, int vfMax, List<String> dynamicFields, String uuid) {
             this.vfName = vfName;
             this.vgEnabled = vgEnabled;
             this.vfMin = vfMin;
             this.vfMax = vfMax;
             this.dynamicFields = dynamicFields;
+            this.uuid = uuid;
         }
 
-        public int vfMin;
-
-        public int vfMax;
-
-        public String vfName;
-
-        public boolean vgEnabled;
-
-        public List<String> dynamicFields;
-
+        final int vfMin;
+        final int vfMax;
+        final String uuid;
+        final String vfName;
+        final boolean vgEnabled;
+        final List<String> dynamicFields;
     }
 
 
-    private class ServiceStatusChecker implements Predicate<Boolean> {
-        private String actualInstanceName;
-        private Set<String> expectedStatuses;
-        private Set<String> columnClassesSet;
-
-        public ServiceStatusChecker(String actualInstanceName, Set<String> expectedStatuses) {
-            this.actualInstanceName = actualInstanceName;
-            this.expectedStatuses = expectedStatuses;
-        }
-
-        @Override
-        public boolean test(Boolean noMeaning) {
-            InstantiationStatusPage.clickRefreshButton();
-            final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName);
-            if (row == null) {
-                System.err.println("**********************" + actualInstanceName + "************************************************");
-                columnClassesSet = Collections.singleton(actualInstanceName + " NOT FOUND");
-                return false; // treat missing row as if test condition not fulfilled
-            } else {
-                columnClassesSet = new HashSet<>(Arrays.asList(
-                        row.findElements(By.xpath(".//*[@id='" + "jobStatus" + "']")).get(0).getAttribute("class").split(" ")));
-                return !(Sets.intersection(expectedStatuses, columnClassesSet).isEmpty());
-            }
-        }
-
-        public Set<String> getColumnClassesSet() {
-            return columnClassesSet;
-        }
-    }
 }