179eb968cb2d4fb15acdef14c43ea159c477e4f9
[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.openqa.selenium.JavascriptExecutor;
30 import org.openqa.selenium.WebElement;
31 import org.openqa.selenium.remote.RemoteWebElement;
32 import org.openqa.selenium.support.ui.Select;
33 import org.skyscreamer.jsonassert.JSONAssert;
34 import org.skyscreamer.jsonassert.JSONCompareMode;
35 import org.testng.annotations.AfterClass;
36 import org.testng.annotations.AfterMethod;
37 import org.testng.annotations.BeforeClass;
38 import org.testng.annotations.DataProvider;
39 import org.testng.annotations.Test;
40 import vid.automation.test.Constants;
41 import vid.automation.test.infra.Click;
42 import vid.automation.test.infra.Exists;
43 import vid.automation.test.infra.Get;
44 import vid.automation.test.infra.Input;
45 import vid.automation.test.infra.SelectOption;
46 import vid.automation.test.infra.Wait;
47 import vid.automation.test.model.User;
48 import vid.automation.test.sections.ChangeManagementPage;
49 import vid.automation.test.services.SimulatorApi;
50 import vid.automation.test.utils.DB_CONFIG;
51
52 public class ChangeManagementTest extends VidBaseTestCase {
53
54     public static final  String SCHEDULED_ID = "0b87fe60-50b0-4bac-a0a7-49e951b0ba9e";
55     @Test
56     public void testLeftPanelChangeManagementButton() {
57         Assert.assertTrue(Wait.byText(Constants.SideMenu.VNF_CHANGES));
58     }
59
60     @Test
61     public void testChangeManagementHeaderLine() {
62         ChangeManagementPage.openChangeManagementPage();
63         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pageHeadlineId));
64         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.headlineNewButtonId));
65         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.headlineSearchInputId));
66     }
67
68     @Test
69     public void testOpenNewChangeManagementModal() {
70         ChangeManagementPage.openNewChangeManagementModal();
71         Assert.assertTrue(Exists.modal());
72         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalSubscriberInputId));
73         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalServiceTypeInputId));
74         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFNameInputId));
75         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFTypeInputId));
76         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalFromVNFVersionInputId));
77         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalWorkFlowInputId));
78         Assert.assertTrue(Exists.byId(Constants.generalSubmitButtonId));
79         Assert.assertTrue(Exists.byId(Constants.generalCancelButtonId));
80     }
81
82     private void openAndFill1stScreen(String vnfName, String vnfTargetVersion, String workflow) {
83         String subscriberId = VNF_DATA_WITH_IN_PLACE.subscriberId;
84         String serviceType = VNF_DATA_WITH_IN_PLACE.serviceType;
85         String vnfType = VNF_DATA_WITH_IN_PLACE.vnfType;
86         String vnfSourceVersion = VNF_DATA_WITH_IN_PLACE.vnfSourceVersion;
87         ChangeManagementPage.openNewChangeManagementModal();
88         Wait.angularHttpRequestsLoaded();
89         ChangeManagementPage.selectSubscriberById(subscriberId);
90         Wait.angularHttpRequestsLoaded();
91         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalServiceTypeInputId, serviceType);
92         Wait.angularHttpRequestsLoaded();
93         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalVNFTypeInputId, vnfType);
94         Wait.angularHttpRequestsLoaded();
95         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalFromVNFVersionInputId, vnfSourceVersion);
96         Wait.angularHttpRequestsLoaded();
97         Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
98         Click.byText(vnfName);
99         // close the multi-select
100         Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
101         Wait.angularHttpRequestsLoaded();
102         GeneralUIUtils.ultimateWait();
103
104         if (vnfTargetVersion != null) {
105             SelectOption.byClassAndVisibleText(Constants.ChangeManagement.newModalTargetVersionInputsClass, vnfTargetVersion);
106             Wait.angularHttpRequestsLoaded();
107         }
108         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalWorkFlowInputId, workflow);
109
110     }
111
112     public void scheduleChange2ndScreen(String duration, String fallback, String concurrencyLimit, String policy) {
113
114         Wait.byText(Constants.ChangeManagement.schedulerModalNowLabel);
115         Click.byText(Constants.ChangeManagement.schedulerModalNowLabel);
116
117
118         SelectOption.byValue(Constants.ChangeManagement.schedulerModalHoursOption, Constants.ChangeManagement.schedulerModalTimeUnitSelectId);
119
120         Input.text(duration, Constants.ChangeManagement.schedulerModalDurationInputTestId);
121         Input.text(fallback, Constants.ChangeManagement.schedulerModalFallbackInputTestId);
122         Input.text(concurrencyLimit, Constants.ChangeManagement.schedulerModalConcurrencyLimitInputTestId);
123         Wait.angularHttpRequestsLoaded();
124         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.schedulerModalPolicySelectId, policy);
125
126         Click.byText(Constants.ChangeManagement.schedulerModalScheduleButtonText);
127
128     }
129
130     static class VNF_DATA_WITH_IN_PLACE {
131         static final int vnfZrdm3amdns02test2Id = 11822;
132         static final int vnfHarrisonKrisId = 12822;
133         static String subscriberId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
134         static String serviceType = "vRichardson";
135         static String vnfType = "vMobileDNS";
136         static String vnfSourceVersion = "1.0";
137         static String vnfName = "zolson3amdns02test2";
138         static String vnfTargetVersion = "5.0";
139         static String workflowName = "VNF In Place Software Update";
140     }
141
142     @AfterClass
143     protected void dropSpecialVNFs() {
144
145         resetGetServicesCache();
146
147         System.out.println("Connecting database...");
148
149         try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
150             System.out.println("Database connected!");
151
152             Statement stmt = connection.createStatement();
153             stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id);
154             stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id);
155             int[] executeBatch = stmt.executeBatch();
156
157             stmt = connection.createStatement();
158             stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId);
159             stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId);
160             executeBatch = stmt.executeBatch();
161
162         } catch (SQLException e) {
163             throw new IllegalStateException("Cannot connect the database!", e);
164         }
165     }
166
167     @BeforeClass
168     protected void registerToSimulator() {
169         SimulatorApi.clearAll();
170         SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND,
171                 "changeManagement/ecompportal_getSessionSlotCheckInterval.json"
172                         , "changeManagement/get_aai_sub_details.json"
173                         , "changeManagement/get_sdc_catalog_services_2f80c596.json"
174                         , "changeManagement/get_service-design-and-creation.json"
175                         , "changeManagement/get_vnf_data_by_globalid_and_service_type.json"
176                         , "changeManagement/service-design-and-creation.json"
177                         , "changeManagement/mso_get_manual_task.json"
178                         , "changeManagement/mso_post_manual_task.json"
179         );
180         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(),SimulatorApi.RegistrationStrategy.APPEND);
181
182         registerDefaultTablesData();
183         resetGetServicesCache();
184     }
185
186     private void registerDefaultTablesData() {
187         SimulatorApi.registerExpectation(
188                 new String[] {"changeManagement/get_scheduler_details_short.json",
189                         "changeManagement/mso_get_change_managements.json"
190                         ,"changeManagement/delete_scheduled_task.json"},
191                 ImmutableMap.of(
192                         "<SCHEDULE_ID>", SCHEDULED_ID,
193                         "<IN_PROGRESS_DATE>", "Fri, 08 Sep 2017 19:34:32 GMT"), SimulatorApi.RegistrationStrategy.APPEND
194         );
195     }
196
197     @BeforeClass
198     protected void prepareSpecialVNFs() {
199
200         dropSpecialVNFs();
201
202         System.out.println("Connecting database...");
203
204         try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
205
206             System.out.println("Database connected!");
207
208             ///////////////////////////////
209             // Add 2 vnfs with some workflows
210             Statement stmt = connection.createStatement();
211             stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " +
212                     "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", '76e908e0-5201-44d2-a3e2-9e6128d05820', '72e465fe-71b1-4e7b-b5ed-9496118ff7a8')");
213             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 2)");
214             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 3)");
215             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 4)");
216             int[] executeBatch = stmt.executeBatch();
217             assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
218
219             stmt = connection.createStatement();
220             stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " +
221                     "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", '0903e1c0-8e03-4936-b5c2-260653b96413', '00beb8f9-6d39-452f-816d-c709b9cbb87d')");
222             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 1)");
223             stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 2)");
224             executeBatch = stmt.executeBatch();
225             assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
226
227         } catch (SQLException e) {
228             throw new IllegalStateException("Cannot connect the database!", e);
229         }
230
231     }
232
233     @Override
234     protected UserCredentials getUserCredentials() {
235
236         String userName = Constants.Users.EMANUEL_vWINIFRED;
237         User user = usersService.getUser(userName);
238         return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
239     }
240
241     private void updateConfigFile(String fileName) {
242         Assert.assertFalse(Exists.byId(Constants.ChangeManagement.newModalConfigUpdateInputId));
243         openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, "VNF Config Update");
244         Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
245         Input.file("changeManagement/" + fileName, Constants.ChangeManagement.newModalConfigUpdateInputId);
246         GeneralUIUtils.ultimateWait();
247     }
248
249     @Test
250     public void regretToCancelWorkflowOnPendingPopUp() {
251         updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short.json");
252         ChangeManagementPage.openChangeManagementPage();
253
254         Wait.angularHttpRequestsLoaded();
255         ChangeManagementPage.clickOnRefreshButton();
256
257         GeneralUIUtils.ultimateWait();
258         clickAndAssertOnCancelButton(SCHEDULED_ID);
259         Click.byClass("pull-right modal-close");
260         //TODO: if refresh button functional will be change to refactor next line.
261         ChangeManagementPage.clickOnRefreshButton();
262
263         assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "cancel-action icon-pending");
264     }
265
266     @Test
267     public void clickOnScheduledJob_SuccessfulMessageAppear() {
268         ChangeManagementPage.openChangeManagementPage();
269 //        Wait.angularHttpRequestsLoaded();
270         GeneralUIUtils.ultimateWait();
271         clickAndAssertOnCancelButton(SCHEDULED_ID);
272         updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short_with_after_cancel" +
273                 ".json");
274
275         clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp();
276
277         GeneralUIUtils.ultimateWait();
278         //TODO: To develop automatic table refresh to avoid click on refresh button.
279         ChangeManagementPage.clickOnRefreshButton();
280         assertCorrectJobDeleted("ctsf0002v");
281
282         assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "ng-hide");
283
284
285     }
286
287     private void clickAndAssertOnCancelButton(String scheduledID){
288         Wait.waitByTestId("icon-status-"+ scheduledID, 5);
289         Click.byTestId("icon-status-"+ scheduledID);
290         GeneralUIUtils.ultimateWait();
291         WebElement cancelPendingConfirmationMessage = Get.byTestId("btn-cancel-workflow");
292         assertThat(cancelPendingConfirmationMessage.getText(),containsString("Are you sure you want to delete workflow"));
293     }
294     private void clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp() {
295
296         try {
297             Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
298             GeneralUIUtils.ultimateWait();
299             Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
300         } finally {
301             if (Exists.byClassAndText("modal-title", "Pending")){
302                 Click.byClass("pull-right modal-close");
303             }
304         }
305         Click.byClassAndVisibleText("btn","OK");
306     }
307
308     private void assertCorrectJobDeleted (String vnfName){
309         WebElement canceledScheduledJobRow = GeneralUIUtils.getWebElementByTestID("pending-table-cm-row");
310         String scheduledVnfName = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(1).getText();
311         String scheduledState = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(5).getText();
312         Assert.assertEquals(vnfName, scheduledVnfName);
313         Assert.assertEquals("Deleted", scheduledState);
314     }
315
316     private void assertAndCheckStatusCellOnDeletedSheduledJob(String scheduledId, String classString){
317         boolean isNotDisplayed = GeneralUIUtils.waitForElementInVisibilityByTestId("icon-status-" + scheduledId, 5);
318         Assert.assertTrue(isNotDisplayed);
319     }
320     public void updateSimulatorWithParametersOfScheduledJod(String jasonFile){
321         SimulatorApi.registerExpectation(
322                 new String[] {"changeManagement/"+jasonFile},
323                 ImmutableMap.of("<SCHEDULE_ID>", SCHEDULED_ID), SimulatorApi.RegistrationStrategy.APPEND
324         );
325     }
326
327     @Test
328     public void testWorkflowVNFInPlaceSoftwareUpdateNotInWorkflowsListWhenNotExpected() {
329         List<String> workflows = getListOfWorkflowsFor("Harrison Kris");
330         assertThat(workflows, not(hasItem(VNF_DATA_WITH_IN_PLACE.workflowName)));
331     }
332
333     @Test
334     public void testWorkflowVNFInPlaceSoftwareUpdateInWorkflowsListWhenExpected()  {
335         List<String> workflows = getListOfWorkflowsFor(VNF_DATA_WITH_IN_PLACE.vnfName);
336         assertThat(workflows, hasItem(VNF_DATA_WITH_IN_PLACE.workflowName));
337     }
338
339     public void openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate() {
340         openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, VNF_DATA_WITH_IN_PLACE.workflowName);
341     }
342
343     @AfterMethod(alwaysRun = true)
344     public void closeForm() {
345         // Tries closing left-out popups, if any
346         // If none -- catch clause will swallow the exception
347         try {
348             Click.byId(Constants.generalCancelButtonId);
349             Click.byId(Constants.generalCancelButtonId);
350             Click.byId(Constants.generalCancelButtonId);
351         } catch (Exception | Error e) {
352             // ok, stop
353         }
354         Wait.modalToDisappear();
355     }
356
357     @Test
358     public void testWorkflowVNFInPlaceSoftwareUpdateShows3Fields() {
359         openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
360
361         List<String> idsWithoutMatchingElement =
362                 Stream.of(
363                         "operations-timeout",
364                         "existing-software-version",
365                         "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("operations-timeout").clear();
419         Get.byId("existing-software-version").clear();
420         Get.byId("new-software-version").clear();
421
422         Get.byId("operations-timeout").sendKeys(operationsTimeout);
423         Get.byId("existing-software-version").sendKeys(existingSwVersion);
424         Get.byId("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
551
552
553
554
555     @Test
556     public void testMainDashboardTableContent () {
557         ChangeManagementPage.openChangeManagementPage();
558         GeneralUIUtils.ultimateWait();
559         List<WebElement> webElements = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId);
560         assertThat("List of pending workflows is empty",webElements,is(not(empty())));
561         //TODO: After scheduler will be ready than we will examine if the content is valid.
562     }
563
564
565     @Test
566     public void testOnlyOneModalIsOpen() throws Exception {
567
568         updateSimulatorWithParametersOfScheduledJod("mso_get_change_managements.json");
569
570         ChangeManagementPage.openChangeManagementPage();
571
572         Wait.byText("ReplaceVnfInfra");
573         GeneralUIUtils.ultimateWait();
574
575
576
577         List<WebElement> elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
578         Assert.assertTrue(elements != null && elements.size() > 0);
579
580         ((JavascriptExecutor)getDriver()).executeScript("arguments[0].scrollIntoView();", elements.get(0));
581
582
583         elements.get(0).click();
584
585         GeneralUIUtils.ultimateWait();
586
587         elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
588         Assert.assertTrue(elements != null && elements.size() > 0);
589         elements.get(2).click();
590
591         GeneralUIUtils.ultimateWait();
592         List<WebElement> webElements = Get.byClass("modal-dialog");
593         Assert.assertTrue(webElements.size() == 1);
594
595     }
596
597     @Test(enabled = false)
598     public void testOpenFailedStatusModal() {
599         ChangeManagementPage.openChangeManagementPage();
600
601         if(!Exists.byClass(Constants.ChangeManagement.failedIconClass)) {
602             //TODO: Create a job which will shown with status fail.
603         }
604
605         Click.byClass(Constants.ChangeManagement.failedIconClass);
606         Wait.modalToBeDisplayed();
607         Assert.assertTrue(Exists.modal());
608         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalHeaderId));
609         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalContentId));
610         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalRetryButtonId));
611         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalRollbackButtonId));
612
613         Click.byClass(Constants.generalCloseModalButtonClass);
614         Wait.modalToDisappear();
615     }
616
617     @Test(enabled = false)
618     public void testOpenInProgressStatusModal() {
619         ChangeManagementPage.openChangeManagementPage();
620
621         if(!Exists.byClass(Constants.ChangeManagement.processIconClass)) {
622             //TODO: Create a job which will shown with status in-progress.
623         }
624
625         Click.byClass(Constants.ChangeManagement.processIconClass);
626         Wait.modalToBeDisplayed();
627         Assert.assertTrue(Exists.modal());
628         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalHeaderId));
629         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalContentId));
630         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalStopButtonId));
631         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalRollbackButtonId));
632
633         Click.byClass(Constants.generalCloseModalButtonClass);
634         Wait.modalToDisappear();
635     }
636
637     @Test(enabled = false)
638     public void testOpenAlertStatusModal() {
639         ChangeManagementPage.openChangeManagementPage();
640
641         if(!Exists.byClass(Constants.ChangeManagement.alertIconClass)) {
642             //TODO: Create a job which will shown with status alert.
643         }
644
645         Click.byClass(Constants.ChangeManagement.alertIconClass);
646         Wait.modalToBeDisplayed();
647         Assert.assertTrue(Exists.modal());
648         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalHeaderId));
649         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalContentId));
650         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalContinueButtonId));
651         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalRollbackButtonId));
652
653         Click.byClass(Constants.generalCloseModalButtonClass);
654         Wait.modalToDisappear();
655     }
656
657     @Test(enabled = false)
658     public void testOpenPendingStatusModal() {
659         ChangeManagementPage.openChangeManagementPage();
660
661         if(!Exists.byClass(Constants.ChangeManagement.pendingIconClass)) {
662             //TODO: Create a job which will shown with status pending.
663         }
664
665         Click.byClass(Constants.ChangeManagement.pendingIconClass);
666         Wait.modalToBeDisplayed();
667         Assert.assertTrue(Exists.modal());
668         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalHeaderId));
669         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalContentId));
670         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalRescheduleButtonId));
671         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalRollbackButtonId));
672
673         Click.byClass(Constants.generalCloseModalButtonClass);
674         Wait.modalToDisappear();
675     }
676
677     @Test(enabled = false)
678     public void testSuccessCancelPendingWorkflow() {
679         ChangeManagementPage.openChangeManagementPage();
680         Wait.angularHttpRequestsLoaded();
681
682         Click.byClass(Constants.ChangeManagement.cancelPendingButtonClass); //cancel pending workflow modal
683         Wait.modalToBeDisplayed();
684         Assert.assertTrue(Exists.modal());
685         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalHeaderId));
686         Assert.assertTrue(Exists.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass));
687         Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
688         Wait.angularHttpRequestsLoaded();
689
690         Wait.modalToBeDisplayed(); //success alert modal should appear
691         Assert.assertTrue(Exists.modal());
692         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalHeaderId));
693         Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
694         Click.byClass(Constants.generalCloseModalButtonClass);
695         Wait.modalToDisappear();
696         //TODO check the workflow deleted from table/changed to deleted action
697     }
698
699     @Test
700     public void testRefreshPageButton() {
701         ChangeManagementPage.openChangeManagementPage();
702         GeneralUIUtils.ultimateWait();
703         List<WebElement> pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId);
704         List<WebElement> activeRows = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId);
705         assertThat("The pending table has no content",pendingRows, is(not(empty())));
706         assertThat("The active table has no content",activeRows, is(not(empty())));
707         Click.byTestId(Constants.ChangeManagement.refreshBtnTestId);
708         GeneralUIUtils.ultimateWait();
709         pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId);
710         assertThat("The pending table has no content",pendingRows, is(not(empty())));
711         assertThat("The active table has no content",activeRows, is(not(empty())));
712         //return the register requests to the default state
713         registerDefaultTablesData();
714     }
715
716     private String getExpectedVidToMsoCallbackData(String modelInvariantId, String vnfInstanceId, String vnfName, String vnfTargetVersion, String workflow, String payload) {
717         return "" +
718                 "{" +
719                 "  \"requestType\": \"" + workflow + "\"," +
720                 "  \"requestDetails\": [" +
721                 "    {" +
722                 "      \"vnfName\": \"" + vnfName + "\"," +
723                 "      \"vnfInstanceId\": \"" + vnfInstanceId + "\"," +
724                 "      \"modelInfo\": {" +
725                 "        \"modelType\": \"vnf\"," +
726                 "        \"modelInvariantId\": \"" + modelInvariantId + "\"," +
727                 "        \"modelVersionId\": \"76e908e0-5201-44d2-a3e2-9e6128d05820\"," +
728                 "        \"modelName\": \"" + vnfName + "\"," +
729                 "        \"modelVersion\": \"" + vnfTargetVersion + "\"," +
730                 "        \"modelCustomizationId\": \"c00e8fc8-af39-4da8-8c78-a7efc2fe5994\"" +
731                 "      }," +
732                 "      \"cloudConfiguration\": {" +
733                 "        \"lcpCloudRegionId\": \"mdt1\"," +
734                 "        \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" +
735                 "      }," +
736                 "      \"requestInfo\": {" +
737                 "        \"source\": \"VID\"," +
738                 "        \"suppressRollback\": false," +
739                 "        \"requestorId\": \"az2016\"" +
740                 "      }," +
741                 "      \"relatedInstanceList\": [" +
742                 "        {" +
743                 "          \"relatedInstance\": {" +
744                 "            \"instanceId\": \"97315a05-e6f3-4c47-ae7e-d850c327aa08\"," +
745                 "            \"modelInfo\": {" +
746                 "              \"modelType\": \"service\"," +
747                 "              \"modelInvariantId\": \"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0\"," +
748                 "              \"modelVersionId\": \"76e908e0-5201-44d2-a3e2-9e6128d05820\"," +
749                 "              \"modelName\": \"action-data\"," +
750                 "              \"modelVersion\": \"1.0\"" +
751                 "            }" +
752                 "          }" +
753                 "        }" +
754                 "      ]," +
755                 "      \"requestParameters\": {" +
756                 payload +
757                 "        \"usePreload\": true" +
758                 "      }" +
759                 "    }" +
760                 "  ]" +
761                 "}";
762     }
763
764 }