Add Feature Flag for cloud-region and nf-role as an optional search (fix)
[vid.git] / vid-automation / src / main / java / vid / automation / test / test / ChangeManagementTest.java
1 package vid.automation.test.test;
2
3
4 import static org.hamcrest.CoreMatchers.containsString;
5 import static org.hamcrest.CoreMatchers.everyItem;
6 import static org.hamcrest.CoreMatchers.hasItem;
7 import static org.hamcrest.CoreMatchers.is;
8 import static org.hamcrest.CoreMatchers.notNullValue;
9 import static org.hamcrest.MatcherAssert.assertThat;
10 import static org.hamcrest.Matchers.greaterThan;
11 import static org.hamcrest.collection.IsEmptyCollection.empty;
12 import static org.hamcrest.core.IsNot.not;
13
14 import com.google.common.collect.ImmutableMap;
15 import com.google.common.primitives.Ints;
16 import java.sql.Connection;
17 import java.sql.DriverManager;
18 import java.sql.SQLException;
19 import java.sql.Statement;
20 import java.util.Arrays;
21 import java.util.List;
22 import java.util.stream.Collectors;
23 import java.util.stream.Stream;
24 import org.json.JSONException;
25 import org.junit.Assert;
26 import org.onap.sdc.ci.tests.datatypes.UserCredentials;
27 import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
28 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
29 import org.onap.simulator.presetGenerator.presets.scheduler.PresetDeleteSchedulerChangeManagement;
30 import org.openqa.selenium.JavascriptExecutor;
31 import org.openqa.selenium.WebElement;
32 import org.openqa.selenium.remote.RemoteWebElement;
33 import org.openqa.selenium.support.ui.Select;
34 import org.skyscreamer.jsonassert.JSONAssert;
35 import org.skyscreamer.jsonassert.JSONCompareMode;
36 import org.testng.annotations.AfterClass;
37 import org.testng.annotations.AfterMethod;
38 import org.testng.annotations.BeforeClass;
39 import org.testng.annotations.DataProvider;
40 import org.testng.annotations.Test;
41 import vid.automation.test.Constants;
42 import vid.automation.test.infra.Click;
43 import vid.automation.test.infra.Exists;
44 import vid.automation.test.infra.FeatureTogglingTest;
45 import vid.automation.test.infra.Features;
46 import vid.automation.test.infra.Get;
47 import vid.automation.test.infra.Input;
48 import vid.automation.test.infra.SelectOption;
49 import vid.automation.test.infra.Wait;
50 import vid.automation.test.model.User;
51 import vid.automation.test.sections.ChangeManagementPage;
52 import vid.automation.test.services.SimulatorApi;
53 import vid.automation.test.utils.DB_CONFIG;
54
55 public class ChangeManagementTest extends VidBaseTestCase {
56
57     public static final String SCHEDULED_ID = "0b87fe60-50b0-4bac-a0a7-49e951b0ba9e";
58
59     @Test
60     public void testLeftPanelChangeManagementButton() {
61         Assert.assertTrue(Wait.byText(Constants.SideMenu.VNF_CHANGES));
62     }
63
64     @Test
65     public void testChangeManagementHeaderLine() {
66         ChangeManagementPage.openChangeManagementPage();
67         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pageHeadlineId));
68         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.headlineNewButtonId));
69         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.headlineSearchInputId));
70     }
71
72     @Test
73     public void testOpenNewChangeManagementModal() {
74         ChangeManagementPage.openNewChangeManagementModal();
75         Assert.assertTrue(Exists.modal());
76         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalSubscriberInputId));
77         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalServiceTypeInputId));
78         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFNameInputId));
79         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFTypeInputId));
80         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalFromVNFVersionInputId));
81         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalWorkFlowInputId));
82         Assert.assertTrue(Exists.byId(Constants.generalSubmitButtonId));
83         Assert.assertTrue(Exists.byId(Constants.generalCancelButtonId));
84     }
85
86     private void openAndFill1stScreen(String vnfName, String vnfTargetVersion, String workflow) {
87         String subscriberId = VNF_DATA_WITH_IN_PLACE.subscriberId;
88         String subscriberName = VNF_DATA_WITH_IN_PLACE.subscriberName;
89         String serviceType = VNF_DATA_WITH_IN_PLACE.serviceType;
90         String vnfType = VNF_DATA_WITH_IN_PLACE.vnfType;
91         String vnfSourceVersion = VNF_DATA_WITH_IN_PLACE.vnfSourceVersion;
92         ChangeManagementPage.openNewChangeManagementModal();
93         Wait.angularHttpRequestsLoaded();
94         SelectOption.waitForOptionInSelect(subscriberName, "subscriberName");
95         ChangeManagementPage.selectSubscriberById(subscriberId);
96         Wait.angularHttpRequestsLoaded();
97
98         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalServiceTypeInputId, serviceType);
99         Wait.angularHttpRequestsLoaded();
100
101         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalVNFTypeInputId, vnfType);
102         Wait.angularHttpRequestsLoaded();
103         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalFromVNFVersionInputId, vnfSourceVersion);
104         Wait.angularHttpRequestsLoaded();
105         Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
106         Click.byText(vnfName);
107         // close the multi-select
108         Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
109         Wait.angularHttpRequestsLoaded();
110         GeneralUIUtils.ultimateWait();
111
112         if (vnfTargetVersion != null) {
113             SelectOption.byClassAndVisibleText(Constants.ChangeManagement.newModalTargetVersionInputsClass, vnfTargetVersion);
114             Wait.angularHttpRequestsLoaded();
115         }
116         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalWorkFlowInputId, workflow);
117
118     }
119
120     public void scheduleChange2ndScreen(String duration, String fallback, String concurrencyLimit, String policy) {
121
122         Wait.byText(Constants.ChangeManagement.schedulerModalNowLabel);
123         Click.byText(Constants.ChangeManagement.schedulerModalNowLabel);
124
125
126         SelectOption.byValue(Constants.ChangeManagement.schedulerModalHoursOption, Constants.ChangeManagement.schedulerModalTimeUnitSelectId);
127
128         Input.text(duration, Constants.ChangeManagement.schedulerModalDurationInputTestId);
129         Input.text(fallback, Constants.ChangeManagement.schedulerModalFallbackInputTestId);
130         Input.text(concurrencyLimit, Constants.ChangeManagement.schedulerModalConcurrencyLimitInputTestId);
131         Wait.angularHttpRequestsLoaded();
132         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.schedulerModalPolicySelectId, policy);
133
134         Click.byText(Constants.ChangeManagement.schedulerModalScheduleButtonText);
135
136     }
137
138     static class VNF_DATA_WITH_IN_PLACE {
139         static final int vnfZrdm3amdns02test2Id = 11822;
140         static final int vnfHarrisonKrisId = 12822;
141         static String subscriberId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
142         static String subscriberName = "Emanuel";
143         static String serviceType = "vRichardson";
144         static String vnfType = "vMobileDNS";
145         static String vnfSourceVersion = "1.0";
146         static String vnfName = "zolson3amdns02test2";
147         static String vnfTargetVersion = "5.0";
148         static String workflowName = "VNF In Place Software Update";
149     }
150
151     @AfterClass
152     protected void dropSpecialVNFs() {
153
154         resetGetServicesCache();
155
156         System.out.println("Connecting database...");
157
158         try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
159             System.out.println("Database connected!");
160
161             Statement stmt = connection.createStatement();
162             stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id);
163             stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id);
164             int[] executeBatch = stmt.executeBatch();
165
166             stmt = connection.createStatement();
167             stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId);
168             stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId);
169             executeBatch = stmt.executeBatch();
170
171         } catch (SQLException e) {
172             throw new IllegalStateException("Cannot connect the database!", e);
173         }
174     }
175
176     @BeforeClass
177     protected void registerToSimulator() {
178         SimulatorApi.clearAll();
179         SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND,
180                 "changeManagement/ecompportal_getSessionSlotCheckInterval.json"
181                 , "changeManagement/get_aai_sub_details.json"
182                 , "changeManagement/get_sdc_catalog_services_2f80c596.json"
183                 , "changeManagement/get_service-design-and-creation.json"
184                 , "changeManagement/get_vnf_data_by_globalid_and_service_type.json"
185                 , "changeManagement/service-design-and-creation.json"
186                 , "changeManagement/mso_get_manual_task.json"
187                 , "changeManagement/mso_post_manual_task.json"
188                 , "changeManagement/mso_get_change_managements_scaleout.json"
189         );
190         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), SimulatorApi.RegistrationStrategy.APPEND);
191
192         registerDefaultTablesData();
193         resetGetServicesCache();
194     }
195
196     private void registerDefaultTablesData() {
197         SimulatorApi.registerExpectation(
198                 new String[]{"changeManagement/get_scheduler_details_short.json",
199                         "changeManagement/mso_get_change_managements.json"
200                         , "changeManagement/delete_scheduled_task.json"},
201                 ImmutableMap.of(
202                         "<SCHEDULE_ID>", SCHEDULED_ID,
203                         "<IN_PROGRESS_DATE>", "Fri, 08 Sep 2017 19:34:32 GMT"), SimulatorApi.RegistrationStrategy.APPEND
204         );
205     }
206
207     @BeforeClass
208     protected void prepareSpecialVNFs() {
209
210         dropSpecialVNFs();
211
212         System.out.println("Connecting database...");
213
214         try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
215
216             System.out.println("Database connected!");
217
218             ///////////////////////////////
219             // Add 2 vnfs with some workflows
220             Statement stmt = connection.createStatement();
221             stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " +
222                     "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", '76e908e0-5201-44d2-a3e2-9e6128d05820', '72e465fe-71b1-4e7b-b5ed-9496118ff7a8')");
223             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 2)");
224             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 3)");
225             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 4)");
226             int[] executeBatch = stmt.executeBatch();
227             assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
228
229             stmt = connection.createStatement();
230             stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " +
231                     "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", '0903e1c0-8e03-4936-b5c2-260653b96413', '00beb8f9-6d39-452f-816d-c709b9cbb87d')");
232             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 1)");
233             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 2)");
234             executeBatch = stmt.executeBatch();
235             assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
236
237         } catch (SQLException e) {
238             throw new IllegalStateException("Cannot connect the database!", e);
239         }
240
241     }
242
243     @Override
244     protected UserCredentials getUserCredentials() {
245
246         String userName = Constants.Users.EMANUEL_vWINIFRED;
247         User user = usersService.getUser(userName);
248         return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
249     }
250
251     private void updateConfigFile(String fileName) {
252         Assert.assertFalse(Exists.byId(Constants.ChangeManagement.newModalConfigUpdateInputId));
253         openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, "VNF Config Update");
254         Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
255         Input.file("changeManagement/" + fileName, Constants.ChangeManagement.newModalConfigUpdateInputId);
256         GeneralUIUtils.ultimateWait();
257     }
258
259     @Test
260     public void regretToCancelWorkflowOnPendingPopUp() {
261         updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short.json");
262         ChangeManagementPage.openChangeManagementPage();
263
264         Wait.angularHttpRequestsLoaded();
265         ChangeManagementPage.clickOnRefreshButton();
266
267         GeneralUIUtils.ultimateWait();
268         clickAndAssertOnCancelButton(SCHEDULED_ID);
269         Click.byClass("pull-right modal-close");
270         //TODO: if refresh button functional will be change to refactor next line.
271         ChangeManagementPage.clickOnRefreshButton();
272
273         assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "cancel-action icon-pending");
274     }
275
276     @Test
277     public void clickOnScheduledJob_SuccessfulMessageAppear() {
278
279         SimulatorApi.registerExpectationFromPreset(new PresetDeleteSchedulerChangeManagement(), SimulatorApi.RegistrationStrategy.APPEND);
280
281         ChangeManagementPage.openChangeManagementPage();
282         GeneralUIUtils.ultimateWait();
283         clickAndAssertOnCancelButton(SCHEDULED_ID);
284         updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short_with_after_cancel" +
285                 ".json");
286
287         clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp();
288
289         GeneralUIUtils.ultimateWait();
290         //TODO: To develop automatic table refresh to avoid click on refresh button.
291         ChangeManagementPage.clickOnRefreshButton();
292         assertCorrectJobDeleted("ctsf0002v");
293
294         assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "ng-hide");
295
296
297     }
298
299     private void clickAndAssertOnCancelButton(String scheduledID) {
300         Wait.waitByTestId("icon-status-" + scheduledID, 5);
301         Click.byTestId("icon-status-" + scheduledID);
302         GeneralUIUtils.ultimateWait();
303         WebElement cancelPendingConfirmationMessage = Get.byTestId("btn-cancel-workflow");
304         assertThat(cancelPendingConfirmationMessage.getText(), containsString("Are you sure you want to delete workflow"));
305     }
306
307     private void clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp() {
308
309         try {
310             Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
311             GeneralUIUtils.ultimateWait();
312             Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
313         } finally {
314             if (Exists.byClassAndText("modal-title", "Pending")) {
315                 Click.byClass("pull-right modal-close");
316             }
317         }
318         Click.byClassAndVisibleText("btn", "OK");
319     }
320
321     private void assertCorrectJobDeleted(String vnfName) {
322         WebElement canceledScheduledJobRow = GeneralUIUtils.getWebElementByTestID("pending-table-cm-row");
323         String scheduledVnfName = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(1).getText();
324         String scheduledState = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(5).getText();
325         Assert.assertEquals(vnfName, scheduledVnfName);
326         Assert.assertEquals("Deleted", scheduledState);
327     }
328
329     private void assertAndCheckStatusCellOnDeletedSheduledJob(String scheduledId, String classString) {
330         boolean isNotDisplayed = GeneralUIUtils.waitForElementInVisibilityByTestId("icon-status-" + scheduledId, 5);
331         Assert.assertTrue(isNotDisplayed);
332     }
333
334     public void updateSimulatorWithParametersOfScheduledJod(String jasonFile) {
335         SimulatorApi.registerExpectation(
336                 new String[]{"changeManagement/" + jasonFile},
337                 ImmutableMap.of("<SCHEDULE_ID>", SCHEDULED_ID), SimulatorApi.RegistrationStrategy.APPEND
338         );
339     }
340
341     @FeatureTogglingTest(value = Features.FLAG_HANDLE_SO_WORKFLOWS, flagActive = false)
342     @Test
343     public void testWorkflowVNFInPlaceSoftwareUpdateNotInWorkflowsListWhenNotExpected() {
344
345         List<String> workflows = getListOfWorkflowsFor("Harrison Kris");
346         assertThat(workflows, not(hasItem(VNF_DATA_WITH_IN_PLACE.workflowName)));
347     }
348
349     @FeatureTogglingTest(value = Features.FLAG_HANDLE_SO_WORKFLOWS, flagActive = false)
350     @Test
351     public void testWorkflowVNFInPlaceSoftwareUpdateInWorkflowsListWhenExpected() {
352         List<String> workflows = getListOfWorkflowsFor(VNF_DATA_WITH_IN_PLACE.vnfName);
353         assertThat(workflows, hasItem(VNF_DATA_WITH_IN_PLACE.workflowName));
354     }
355
356     public void openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate() {
357         openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, VNF_DATA_WITH_IN_PLACE.workflowName);
358     }
359
360     @AfterMethod(alwaysRun = true)
361     public void closeForm() {
362         // Tries closing left-out popups, if any
363         // If none -- catch clause will swallow the exception
364         try {
365             Click.byId(Constants.generalCancelButtonId);
366             Click.byId(Constants.generalCancelButtonId);
367             Click.byId(Constants.generalCancelButtonId);
368         } catch (Exception | Error e) {
369             // ok, stop
370         }
371         Wait.modalToDisappear();
372     }
373
374     @Test
375     public void testWorkflowVNFInPlaceSoftwareUpdateShows3Fields() {
376
377         openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
378
379         List<String> idsWithoutMatchingElement =
380                 Stream.of(
381                         "internal-workflow-parameter-text-2-operations-timeout",
382                         "internal-workflow-parameter-text-3-existing-software-version",
383                         "internal-workflow-parameter-text-4-new-software-version")
384                         .filter(id -> Get.byId(id) == null)
385                         .collect(Collectors.toList());
386         assertThat("all three special VNFInPlace fields should appear", idsWithoutMatchingElement, is(empty()));
387
388         assertThat(Get.byId(Constants.generalSubmitButtonId).isEnabled(), is(false));
389     }
390
391     @Test
392     public void testWorkflowVNFInPlaceSoftwareUpdate3ValidValues() {
393         openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
394
395         final String[][] options = {
396                 {"true", "111", "222", "333"}
397                 , {"true", "14710454", "Cz-Ou0EK5eH9.gAK1", "G9bUiFX3QM8xpxF8TlZ7b5T0"}
398                 , {"true", "25316893", "fMx9V5kp.5.JGtYRhNGVTPoJ", "Jv5IieY0kTNjkfZ64bHXngR6"}
399                 , {"true", "8", "3t3MhTRqkyjB85o5NC9OacAw", "B.bJ6f7KYI6WzDMR0fyNM9r4"}
400                 , {"true", "3176", "ZlRS7tczf0cbMxQbBfyc6AP5", "1G1"}
401                 , {"true", "78058488", "n", "WkH"}
402                 , {"true", "501778", "1.d74LrJbBmcR.7bfvH.UZMX", "tFTAel7PS4RKEJeJ0b6mTeVT"}
403                 , {"true", "76639623", "m2.EhbBxRE.rJj3j6qDtMxGR", "Rgkm-EPM1K0KAWm43Ex1wwjj"}
404                 , {"true", "91244280", "zPDHRrXW65xR6GV.gVZND8C0", "mkrqFG26m7Vmv-28etQVyp04"}
405                 , {"true", "8966", "7k2sRK2qSFRVCFpEvrlbmxAL", "IlvfmWTqzpF0Jo3elpZPHXx"}
406                 , {"true", "01303495", "G26yl8B0NbLIKxu23h86QbZz", "vSou1seqCrcv9KoVbhlj4Wa4"}
407                 , {"true", "787", "ce7joKCHYowpM2PtCb53Zs2v", ".qw1oY9HKjfAF2Yt05JNgib9"}
408                 , {"true", "40116583", "-3bDEzEn.RbNnT2hWKQqf2HL", "QzlKlKZiIpc7sQ.EzO"}
409                 , {"false", "", "222", "333"}
410                 , {"false", "111", "", "333"}
411                 , {"false", "111", "222", ""}
412                 , {"false", "111a", "222", "333"}
413                 , {"false", "aaa", "222", "333"}
414                 , {"false", "111-", "222", "333"}
415 //                , {"false", " 111", "222", "333"}
416 //                , {"false", "111", "222 ", "333"}
417 //                , {"false", "111", "222", " 333"}
418                 , {"false", "111", "222", "3 33"}
419                 , {"false", "111", "22,2", "333"}
420                 , {"false", "111", "222~", "333"}
421                 , {"false", "111", "222", "333&"}
422                 , {"false", "$", "222", "333"}
423                 , {"false", "111", "@", "333"}
424                 , {"false", "111", "222", "^^^^^^"}
425         };
426
427         for (String[] option : options) {
428             fillVNFInPlace3Fields(option[1], option[2], option[3]);
429             assertThat("failed for set: " + Arrays.toString(option),
430                     Get.byId(Constants.generalSubmitButtonId).isEnabled(), is(Boolean.parseBoolean(option[0])));
431         }
432
433     }
434
435     private void fillVNFInPlace3Fields(String operationsTimeout, String existingSwVersion, String newSwVersion) {
436         Get.byId("internal-workflow-parameter-text-2-operations-timeout").clear();
437         Get.byId("internal-workflow-parameter-text-3-existing-software-version").clear();
438         Get.byId("internal-workflow-parameter-text-4-new-software-version").clear();
439
440         Get.byId("internal-workflow-parameter-text-2-operations-timeout").sendKeys(operationsTimeout);
441         Get.byId("internal-workflow-parameter-text-3-existing-software-version").sendKeys(existingSwVersion);
442         Get.byId("internal-workflow-parameter-text-4-new-software-version").sendKeys(newSwVersion);
443     }
444
445     private List<String> getListOfWorkflowsFor(String vnfName) {
446
447         openAndFill1stScreen(vnfName, null /*no matter*/, "Replace");
448
449         Select selectlist = new Select(Get.byId("workflow"));
450         List<String> workflows = selectlist.getOptions().stream().map(we -> we.getText()).collect(Collectors.toList());
451
452         Click.byId(Constants.generalCancelButtonId);
453
454         return workflows;
455     }
456
457     @DataProvider
458     public static Object[][] dataForUpdateWorkflowPartialWithInPlace() {
459         return new Object[][]{
460                 {"1111", "22222", "33333"}
461                 , {"8", "3t3MhTRqkyjB85o5NC9OacAw", "B.bJ6f7KYI6Wz-----DMR0.fyNM9r4"}
462                 , {"78058488", "n", "WkH"}
463         };
464     }
465
466     // Deleted testVidToMsoCallbackDataWithInPlaceSWUpdate test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
467
468
469     // Deleted testUploadConfigUpdateFile test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
470     @FeatureTogglingTest(value = Features.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH, flagActive = false)
471     @Test
472     public void testUploadConfigUpdateNonCsvFile() {
473         String fileName = "non-valid.json";
474         updateConfigFile(fileName);
475         WebElement errorLabel = Get.byId("errorLabel");
476         Assert.assertEquals("wrong error message for non csv file", "Invalid file type. Please select a file with a CSV extension.", errorLabel.getText());
477         Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
478     }
479
480     @Test(dataProvider = "invalidCsvFiles")
481     public void testUploadInvalidConfigUpdateFile(String fileName) {
482         updateConfigFile(fileName);
483         WebElement errorLabel = Get.byId("errorContentLabel");
484         Assert.assertEquals("wrong error message for non csv file", "Invalid file structure.", errorLabel.getText());
485         Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
486     }
487
488     @DataProvider
489     public static Object[][] invalidCsvFiles() {
490         return new Object[][]{
491                 {"emptyFile.csv"},
492                 {"withoutPayload.csv"},
493                 {"withoutConfigurationParameters.csv"},
494                 {"withoutRequestParameters.csv"}
495         };
496     }
497
498     // Deleted testVidToMsoCallbackData test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
499
500     private void assertThatVidToMsoCallbackDataIsOk(String workflow, String payload) {
501         Assert.assertTrue(Get.byId(Constants.generalSubmitButtonId).isEnabled());
502         Click.byId(Constants.generalSubmitButtonId);
503
504         String vidToMsoCallbackData = Input.getValueByTestId("vidToMsoCallbackData");
505
506         String modelInvariantId = "72e465fe-71b1-4e7b-b5ed-9496118ff7a8";
507         String vnfInstanceId = "8e5e3ba1-3fe6-4d86-966e-f9f03dab4855";
508         String expected = getExpectedVidToMsoCallbackData(modelInvariantId, vnfInstanceId, VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, workflow, payload);
509
510         try {
511             JSONAssert.assertEquals("built mso request is not ok", expected, vidToMsoCallbackData, JSONCompareMode.STRICT);
512         } catch (JSONException e) {
513             throw new RuntimeException(e);
514         }
515
516         Click.byId(Constants.generalCancelButtonId);
517     }
518
519     @Test(enabled = false)
520     public void testUpdateWorkflowNow() {
521
522         String workflow = "Update";
523
524         String duration = "1";
525         String fallback = "1";
526         String concurrencyLimit = "1";
527         String policy = "SNIRO_1710.Config_MS_PlacementOptimizationPolicy_dhv_v1.1.xml";
528
529         openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, workflow);
530         Assert.assertTrue(Get.byId(Constants.generalSubmitButtonId).isEnabled());
531         Click.byId(Constants.generalSubmitButtonId);
532
533         scheduleChange2ndScreen(duration, fallback, concurrencyLimit, policy);
534     }
535
536     @Test
537     public void testNewChangeManagementCreation() {
538         ChangeManagementPage.openChangeManagementPage();
539
540         //TODO: After scheduler will be ready than we will examine if the creation working fine.
541     }
542
543     @Test
544     public void testMainDashboardTable() {
545         ChangeManagementPage.openChangeManagementPage();
546         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardActiveTabId));
547         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTabId));
548
549         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardActiveTableId));
550         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardInProgressTheadId));
551         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardPendingTheadId));
552
553         Click.byId(Constants.ChangeManagement.dashboardFinishedTabId);
554         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTableId));
555         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTheadId));
556
557         Click.byId(Constants.ChangeManagement.dashboardActiveTabId);
558     }
559
560     @Test
561     public void testFinishedSectionIncludeUnlockedItem() {
562         ChangeManagementPage.openChangeManagementPage();
563         Click.byId(Constants.ChangeManagement.dashboardFinishedTabId);
564         Assert.assertThat(Get.byClassAndText("vnf-name", "Unlocked instance"), is(notNullValue()));
565     }
566
567     @Test
568     public void testMainDashboardTableContent() {
569         ChangeManagementPage.openChangeManagementPage();
570         GeneralUIUtils.ultimateWait();
571         List<WebElement> webElements = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId);
572         assertThat("List of pending workflows is empty", webElements, is(not(empty())));
573         //TODO: After scheduler will be ready than we will examine if the content is valid.
574     }
575
576     @Test
577     public void testOnlyOneModalIsOpen() throws Exception {
578
579         updateSimulatorWithParametersOfScheduledJod("mso_get_change_managements.json");
580
581         ChangeManagementPage.openChangeManagementPage();
582
583         Wait.byText("ReplaceVnfInfra");
584         GeneralUIUtils.ultimateWait();
585
586
587         List<WebElement> elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
588         Assert.assertTrue(elements != null && elements.size() > 0);
589
590         ((JavascriptExecutor) getDriver()).executeScript("arguments[0].scrollIntoView();", elements.get(0));
591
592
593         elements.get(0).click();
594
595         GeneralUIUtils.ultimateWait();
596
597         elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
598         Assert.assertTrue(elements != null && elements.size() > 0);
599         elements.get(2).click();
600
601         GeneralUIUtils.ultimateWait();
602         List<WebElement> webElements = Get.byClass("modal-dialog");
603         Assert.assertTrue(webElements.size() == 1);
604
605     }
606
607     @Test(enabled = false)
608     public void testOpenFailedStatusModal() {
609         ChangeManagementPage.openChangeManagementPage();
610
611         if (!Exists.byClass(Constants.ChangeManagement.failedIconClass)) {
612             //TODO: Create a job which will shown with status fail.
613         }
614
615         Click.byClass(Constants.ChangeManagement.failedIconClass);
616         Wait.modalToBeDisplayed();
617         Assert.assertTrue(Exists.modal());
618         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalHeaderId));
619         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalContentId));
620         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalRetryButtonId));
621         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalRollbackButtonId));
622
623         Click.byClass(Constants.generalCloseModalButtonClass);
624         Wait.modalToDisappear();
625     }
626
627     @Test(enabled = false)
628     public void testOpenInProgressStatusModal() {
629         ChangeManagementPage.openChangeManagementPage();
630
631         if (!Exists.byClass(Constants.ChangeManagement.processIconClass)) {
632             //TODO: Create a job which will shown with status in-progress.
633         }
634
635         Click.byClass(Constants.ChangeManagement.processIconClass);
636         Wait.modalToBeDisplayed();
637         Assert.assertTrue(Exists.modal());
638         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalHeaderId));
639         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalContentId));
640         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalStopButtonId));
641         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalRollbackButtonId));
642
643         Click.byClass(Constants.generalCloseModalButtonClass);
644         Wait.modalToDisappear();
645     }
646
647     @Test(enabled = false)
648     public void testOpenAlertStatusModal() {
649         ChangeManagementPage.openChangeManagementPage();
650
651         if (!Exists.byClass(Constants.ChangeManagement.alertIconClass)) {
652             //TODO: Create a job which will shown with status alert.
653         }
654
655         Click.byClass(Constants.ChangeManagement.alertIconClass);
656         Wait.modalToBeDisplayed();
657         Assert.assertTrue(Exists.modal());
658         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalHeaderId));
659         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalContentId));
660         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalContinueButtonId));
661         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalRollbackButtonId));
662
663         Click.byClass(Constants.generalCloseModalButtonClass);
664         Wait.modalToDisappear();
665     }
666
667     @Test(enabled = false)
668     public void testOpenPendingStatusModal() {
669         ChangeManagementPage.openChangeManagementPage();
670
671         if (!Exists.byClass(Constants.ChangeManagement.pendingIconClass)) {
672             //TODO: Create a job which will shown with status pending.
673         }
674
675         Click.byClass(Constants.ChangeManagement.pendingIconClass);
676         Wait.modalToBeDisplayed();
677         Assert.assertTrue(Exists.modal());
678         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalHeaderId));
679         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalContentId));
680         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalRescheduleButtonId));
681         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalRollbackButtonId));
682
683         Click.byClass(Constants.generalCloseModalButtonClass);
684         Wait.modalToDisappear();
685     }
686
687     @Test(enabled = false)
688     public void testSuccessCancelPendingWorkflow() {
689         ChangeManagementPage.openChangeManagementPage();
690         Wait.angularHttpRequestsLoaded();
691
692         Click.byClass(Constants.ChangeManagement.cancelPendingButtonClass); //cancel pending workflow modal
693         Wait.modalToBeDisplayed();
694         Assert.assertTrue(Exists.modal());
695         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalHeaderId));
696         Assert.assertTrue(Exists.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass));
697         Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
698         Wait.angularHttpRequestsLoaded();
699
700         Wait.modalToBeDisplayed(); //success alert modal should appear
701         Assert.assertTrue(Exists.modal());
702         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalHeaderId));
703         Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
704         Click.byClass(Constants.generalCloseModalButtonClass);
705         Wait.modalToDisappear();
706         //TODO check the workflow deleted from table/changed to deleted action
707     }
708
709     @Test
710     public void testRefreshPageButton() {
711         ChangeManagementPage.openChangeManagementPage();
712         GeneralUIUtils.ultimateWait();
713         List<WebElement> pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId);
714         List<WebElement> activeRows = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId);
715         assertThat("The pending table has no content", pendingRows, is(not(empty())));
716         assertThat("The active table has no content", activeRows, is(not(empty())));
717         Click.byTestId(Constants.ChangeManagement.refreshBtnTestId);
718         GeneralUIUtils.ultimateWait();
719         pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId);
720         assertThat("The pending table has no content", pendingRows, is(not(empty())));
721         assertThat("The active table has no content", activeRows, is(not(empty())));
722         //return the register requests to the default state
723         registerDefaultTablesData();
724     }
725
726     private String getExpectedVidToMsoCallbackData(String modelInvariantId, String vnfInstanceId, String vnfName, String vnfTargetVersion, String workflow, String payload) {
727         return "" +
728                 "{" +
729                 "  \"requestType\": \"" + workflow + "\"," +
730                 "  \"requestDetails\": [" +
731                 "    {" +
732                 "      \"vnfName\": \"" + vnfName + "\"," +
733                 "      \"vnfInstanceId\": \"" + vnfInstanceId + "\"," +
734                 "      \"modelInfo\": {" +
735                 "        \"modelType\": \"vnf\"," +
736                 "        \"modelInvariantId\": \"" + modelInvariantId + "\"," +
737                 "        \"modelVersionId\": \"76e908e0-5201-44d2-a3e2-9e6128d05820\"," +
738                 "        \"modelName\": \"" + vnfName + "\"," +
739                 "        \"modelVersion\": \"" + vnfTargetVersion + "\"," +
740                 "        \"modelCustomizationId\": \"c00e8fc8-af39-4da8-8c78-a7efc2fe5994\"" +
741                 "      }," +
742                 "      \"cloudConfiguration\": {" +
743                 "        \"lcpCloudRegionId\": \"mdt1\"," +
744                 "        \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" +
745                 "      }," +
746                 "      \"requestInfo\": {" +
747                 "        \"source\": \"VID\"," +
748                 "        \"suppressRollback\": false," +
749                 "        \"requestorId\": \"az2016\"" +
750                 "      }," +
751                 "      \"relatedInstanceList\": [" +
752                 "        {" +
753                 "          \"relatedInstance\": {" +
754                 "            \"instanceId\": \"97315a05-e6f3-4c47-ae7e-d850c327aa08\"," +
755                 "            \"modelInfo\": {" +
756                 "              \"modelType\": \"service\"," +
757                 "              \"modelInvariantId\": \"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0\"," +
758                 "              \"modelVersionId\": \"76e908e0-5201-44d2-a3e2-9e6128d05820\"," +
759                 "              \"modelName\": \"action-data\"," +
760                 "              \"modelVersion\": \"1.0\"" +
761                 "            }" +
762                 "          }" +
763                 "        }" +
764                 "      ]," +
765                 "      \"requestParameters\": {" +
766                 payload +
767                 "        \"usePreload\": true" +
768                 "      }" +
769                 "    }" +
770                 "  ]" +
771                 "}";
772     }
773
774 }