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