1 package vid.automation.test.test;
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;
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;
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;
40 public class ChangeManagementTest extends VidBaseTestCase {
42 public static final String SCHEDULED_ID = "0b87fe60-50b0-4bac-a0a7-49e951b0ba9e";
44 public void testLeftPanelChangeManagementButton() {
45 Assert.assertTrue(Wait.byText(Constants.SideMenu.VNF_CHANGES));
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));
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));
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();
92 if (vnfTargetVersion != null) {
93 SelectOption.byClassAndVisibleText(Constants.ChangeManagement.newModalTargetVersionInputsClass, vnfTargetVersion);
94 Wait.angularHttpRequestsLoaded();
96 SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalWorkFlowInputId, workflow);
100 public void scheduleChange2ndScreen(String duration, String fallback, String concurrencyLimit, String policy) {
102 Wait.byText(Constants.ChangeManagement.schedulerModalNowLabel);
103 Click.byText(Constants.ChangeManagement.schedulerModalNowLabel);
106 SelectOption.byValue(Constants.ChangeManagement.schedulerModalHoursOption, Constants.ChangeManagement.schedulerModalTimeUnitSelectId);
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);
114 Click.byText(Constants.ChangeManagement.schedulerModalScheduleButtonText);
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";
131 protected void dropSpecialVNFs() {
133 resetGetServicesCache();
135 System.out.println("Connecting database...");
137 try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
138 System.out.println("Database connected!");
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();
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();
150 } catch (SQLException e) {
151 throw new IllegalStateException("Cannot connect the database!", e);
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"
168 SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(),SimulatorApi.RegistrationStrategy.APPEND);
170 registerDefaultTablesData();
171 resetGetServicesCache();
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"},
180 "<SCHEDULE_ID>", SCHEDULED_ID,
181 "<IN_PROGRESS_DATE>", "Fri, 08 Sep 2017 19:34:32 GMT"), SimulatorApi.RegistrationStrategy.APPEND
186 protected void prepareSpecialVNFs() {
190 System.out.println("Connecting database...");
192 try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
194 System.out.println("Database connected!");
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)));
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)));
215 } catch (SQLException e) {
216 throw new IllegalStateException("Cannot connect the database!", e);
222 protected UserCredentials getUserCredentials() {
224 String userName = Constants.Users.EMANUEL_vWINIFRED;
225 User user = usersService.getUser(userName);
226 return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
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();
238 public void regretToCancelWorkflowOnPendingPopUp() {
239 updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short.json");
240 ChangeManagementPage.openChangeManagementPage();
242 Wait.angularHttpRequestsLoaded();
243 ChangeManagementPage.clickOnRefreshButton();
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();
251 assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "cancel-action icon-pending");
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" +
263 clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp();
265 GeneralUIUtils.ultimateWait();
266 //TODO: To develop automatic table refresh to avoid click on refresh button.
267 ChangeManagementPage.clickOnRefreshButton();
268 assertCorrectJobDeleted("ctsf0002v");
270 assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "ng-hide");
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"));
282 private void clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp() {
285 Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
286 GeneralUIUtils.ultimateWait();
287 Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
289 if (Exists.byClassAndText("modal-title", "Pending")){
290 Click.byClass("pull-right modal-close");
293 Click.byClassAndVisibleText("btn","OK");
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);
304 private void assertAndCheckStatusCellOnDeletedSheduledJob(String scheduledId, String classString){
305 boolean isNotDisplayed = GeneralUIUtils.waitForElementInVisibilityByTestId("icon-status-" + scheduledId, 5);
306 Assert.assertTrue(isNotDisplayed);
308 public void updateSimulatorWithParametersOfScheduledJod(String jasonFile){
309 SimulatorApi.registerExpectation(
310 new String[] {"changeManagement/"+jasonFile},
311 ImmutableMap.of("<SCHEDULE_ID>", SCHEDULED_ID), SimulatorApi.RegistrationStrategy.APPEND
316 public void testWorkflowVNFInPlaceSoftwareUpdateNotInWorkflowsListWhenNotExpected() {
317 List<String> workflows = getListOfWorkflowsFor("Harrison Kris");
318 assertThat(workflows, not(hasItem(VNF_DATA_WITH_IN_PLACE.workflowName)));
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));
327 public void openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate() {
328 openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, VNF_DATA_WITH_IN_PLACE.workflowName);
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
336 Click.byId(Constants.generalCancelButtonId);
337 Click.byId(Constants.generalCancelButtonId);
338 Click.byId(Constants.generalCancelButtonId);
339 } catch (Exception | Error e) {
342 Wait.modalToDisappear();
346 public void testWorkflowVNFInPlaceSoftwareUpdateShows3Fields() {
347 openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
349 List<String> idsWithoutMatchingElement =
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()));
358 assertThat(Get.byId(Constants.generalSubmitButtonId).isEnabled(), is(false));
362 public void testWorkflowVNFInPlaceSoftwareUpdate3ValidValues() {
363 openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
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", "^^^^^^"}
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])));
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();
410 Get.byId("operations-timeout").sendKeys(operationsTimeout);
411 Get.byId("existing-software-version").sendKeys(existingSwVersion);
412 Get.byId("new-software-version").sendKeys(newSwVersion);
415 private List<String> getListOfWorkflowsFor(String vnfName) {
417 openAndFill1stScreen(vnfName, null /*no matter*/, "Replace");
419 Select selectlist = new Select(Get.byId("workflow"));
420 List<String> workflows = selectlist.getOptions().stream().map(we -> we.getText()).collect(Collectors.toList());
422 Click.byId(Constants.generalCancelButtonId);
428 public static Object[][] dataForUpdateWorkflowPartialWithInPlace() {
429 return new Object[][] {
430 { "1111", "22222", "33333" }
431 , {"8", "3t3MhTRqkyjB85o5NC9OacAw", "B.bJ6f7KYI6Wz-----DMR0.fyNM9r4"}
432 , {"78058488", "n", "WkH"}
436 // Deleted testVidToMsoCallbackDataWithInPlaceSWUpdate test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
440 // Deleted testUploadConfigUpdateFile test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
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());
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());
460 public static Object[][] invalidCsvFiles() {
461 return new Object[][] {
463 {"withoutPayload.csv"},
464 {"withoutConfigurationParameters.csv"},
465 {"withoutRequestParameters.csv"}
469 // Deleted testVidToMsoCallbackData test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
471 private void assertThatVidToMsoCallbackDataIsOk(String workflow, String payload) {
472 Assert.assertTrue(Get.byId(Constants.generalSubmitButtonId).isEnabled());
473 Click.byId(Constants.generalSubmitButtonId);
475 String vidToMsoCallbackData = Input.getValueByTestId("vidToMsoCallbackData");
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);
482 JSONAssert.assertEquals("built mso request is not ok", expected, vidToMsoCallbackData, JSONCompareMode.STRICT);
483 } catch (JSONException e) {
484 throw new RuntimeException(e);
487 Click.byId(Constants.generalCancelButtonId);
490 @Test(enabled = false)
491 public void testUpdateWorkflowNow() {
493 String workflow = "Update";
495 String duration = "1";
496 String fallback = "1";
497 String concurrencyLimit = "1";
498 String policy = "SNIRO_1710.Config_MS_PlacementOptimizationPolicy_dhv_v1.1.xml";
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);
504 scheduleChange2ndScreen(duration, fallback, concurrencyLimit, policy);
508 public void testNewChangeManagementCreation() {
509 ChangeManagementPage.openChangeManagementPage();
511 //TODO: After scheduler will be ready than we will examine if the creation working fine.
515 public void testMainDashboardTable() {
516 ChangeManagementPage.openChangeManagementPage();
517 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardActiveTabId));
518 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTabId));
520 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardActiveTableId));
521 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardInProgressTheadId));
522 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardPendingTheadId));
524 Click.byId(Constants.ChangeManagement.dashboardFinishedTabId);
525 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTableId));
526 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTheadId));
528 Click.byId(Constants.ChangeManagement.dashboardActiveTabId);
532 public void testFinishedSectionIncludeUnlockedItem() {
533 ChangeManagementPage.openChangeManagementPage();
534 Click.byId(Constants.ChangeManagement.dashboardFinishedTabId);
535 Assert.assertThat(Get.byClassAndText("vnf-name","Unlocked instance"),is(notNullValue()));
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.
554 public void testOnlyOneModalIsOpen() throws Exception {
556 updateSimulatorWithParametersOfScheduledJod("mso_get_change_managements.json");
558 ChangeManagementPage.openChangeManagementPage();
560 Wait.byText("ReplaceVnfInfra");
561 GeneralUIUtils.ultimateWait();
565 List<WebElement> elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
566 Assert.assertTrue(elements != null && elements.size() > 0);
568 ((JavascriptExecutor)getDriver()).executeScript("arguments[0].scrollIntoView();", elements.get(0));
571 elements.get(0).click();
573 GeneralUIUtils.ultimateWait();
575 elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
576 Assert.assertTrue(elements != null && elements.size() > 0);
577 elements.get(2).click();
579 GeneralUIUtils.ultimateWait();
580 List<WebElement> webElements = Get.byClass("modal-dialog");
581 Assert.assertTrue(webElements.size() == 1);
585 @Test(enabled = false)
586 public void testOpenFailedStatusModal() {
587 ChangeManagementPage.openChangeManagementPage();
589 if(!Exists.byClass(Constants.ChangeManagement.failedIconClass)) {
590 //TODO: Create a job which will shown with status fail.
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));
601 Click.byClass(Constants.generalCloseModalButtonClass);
602 Wait.modalToDisappear();
605 @Test(enabled = false)
606 public void testOpenInProgressStatusModal() {
607 ChangeManagementPage.openChangeManagementPage();
609 if(!Exists.byClass(Constants.ChangeManagement.processIconClass)) {
610 //TODO: Create a job which will shown with status in-progress.
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));
621 Click.byClass(Constants.generalCloseModalButtonClass);
622 Wait.modalToDisappear();
625 @Test(enabled = false)
626 public void testOpenAlertStatusModal() {
627 ChangeManagementPage.openChangeManagementPage();
629 if(!Exists.byClass(Constants.ChangeManagement.alertIconClass)) {
630 //TODO: Create a job which will shown with status alert.
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));
641 Click.byClass(Constants.generalCloseModalButtonClass);
642 Wait.modalToDisappear();
645 @Test(enabled = false)
646 public void testOpenPendingStatusModal() {
647 ChangeManagementPage.openChangeManagementPage();
649 if(!Exists.byClass(Constants.ChangeManagement.pendingIconClass)) {
650 //TODO: Create a job which will shown with status pending.
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));
661 Click.byClass(Constants.generalCloseModalButtonClass);
662 Wait.modalToDisappear();
665 @Test(enabled = false)
666 public void testSuccessCancelPendingWorkflow() {
667 ChangeManagementPage.openChangeManagementPage();
668 Wait.angularHttpRequestsLoaded();
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();
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
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();
704 private String getExpectedVidToMsoCallbackData(String modelInvariantId, String vnfInstanceId, String vnfName, String vnfTargetVersion, String workflow, String payload) {
707 " \"requestType\": \"" + workflow + "\"," +
708 " \"requestDetails\": [" +
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\"" +
720 " \"cloudConfiguration\": {" +
721 " \"lcpCloudRegionId\": \"mdt1\"," +
722 " \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" +
724 " \"requestInfo\": {" +
725 " \"source\": \"VID\"," +
726 " \"suppressRollback\": false," +
727 " \"requestorId\": \"az2016\"" +
729 " \"relatedInstanceList\": [" +
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\"" +
743 " \"requestParameters\": {" +
745 " \"usePreload\": true" +