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