diff --git a/src/main/java/configuration/ui/data/simplOpen/Authority.java b/src/main/java/configuration/ui/data/simplOpen/Authority.java index 47d1a88169826ab10ab959edb425ba3b57d271b8..d14b1a1be803c90715d3ad3a7fb7121339e4e9a3 100644 --- a/src/main/java/configuration/ui/data/simplOpen/Authority.java +++ b/src/main/java/configuration/ui/data/simplOpen/Authority.java @@ -32,6 +32,7 @@ public class Authority { public static final String USER_PSO_SIMPL_3049_IDENTIFIER = "019503b3-5354-7c15-acdb-72cdee021db0"; public static final String USER_PSO_SIMPL_3049_ONBOARDING_DATE = "Fri Feb 14 2025"; public static final String USER_PSO_SIMPL_3049_CREDENTIALS_EXPIRATION_DATE = "-"; + public static final String REQUESTS_LIST_TITLE = "Request list"; public static final String REQUESTS_LIST_TABLE_REQUEST_STATUS_COLUMN = "Request status"; public static final String REQUESTS_LIST_TABLE_REQUESTER_EMAIL_COLUMN = "Requester email"; public static final String REQUESTS_LIST_TABLE_PARTICIPANT_TYPE_COLUMN = "Participant type"; @@ -47,14 +48,14 @@ public class Authority { public static final String IDENTITY_ATTRIBUTES_DETAILS_HEADER = "Identity attributes details"; public static final String PARTICIPANT_PAGE_PARTICIPANT_LIST_HEADER = "Participant List"; public static final String PARTICIPANT_PAGE_FILTER_BUTTON = "Filter"; + public static final String PARTICIPANT_PAGE_RESET_FILTER_BUTTON = "Reset"; + public static final String PARTICIPANT_PAGE_APPLY_FILTER_BUTTON = "Apply"; public static final String PARTICIPANT_PAGE_PARTICIPANT_NAME_COLUMN = "Participant Name"; public static final String PARTICIPANT_PAGE_PARTICIPANT_TYPE_COLUMN = "Participant type"; public static final String PARTICIPANT_PAGE_ONBOARDING_DATE_COLUMN = "Onboarding Date"; public static final String PARTICIPANT_PAGE_ACTIONS_COLUMN = "Actions"; public static final String ERROR_MESSAGE = "Invalid username or password."; public static final String PARTICIPANT_PAGE_FILTER_SELECT_COLUMN = "Select column"; - public static final String PARTICIPANT_PAGE_APPLY_FILTER_BUTTON = "Apply"; - public static final String PARTICIPANT_PAGE_RESET_FILTER_BUTTON = "Reset"; public static final String PARTICIPANT_LIST_PAGE_HEADER = "Participant List"; public static final String NEW_ATTRIBUTE_HEADER = "New attribute"; public static final String SUCCESSFUL_IDENTITY_ATTRIBUTE_CREATION_ALERT_MESSAGE = "You successfully created an attribute"; diff --git a/src/main/java/framework/ui/locators/simplOpen/Authority.java b/src/main/java/framework/ui/locators/simplOpen/Authority.java index 5f7fe1f36b737c2458a2a2b483669a8df38c1470..68a9a2364725c2e873a5e820dec4f6386322fa79 100644 --- a/src/main/java/framework/ui/locators/simplOpen/Authority.java +++ b/src/main/java/framework/ui/locators/simplOpen/Authority.java @@ -1,6 +1,15 @@ package framework.ui.locators.simplOpen; public class Authority { + /********************************** Common Locators ************************************************************************/ + public static final String LOGOUT_BUTTON = "//span[contains(text(), 'Logout' )]"; + public static final String CLOSE_ALERT_MESSAGE = "button[aria-label='Close']"; + public static final String KEYCLOAK_USERNAME_INPUT_LOCATOR = "input[id='username']"; + public static final String KEYCLOAK_PASSWORD_INPUT_LOCATOR = "input[id='password']"; + public static final String KEYCLOAK_SIGN_IN_BUTTON_LOCATOR = "input[id='kc-login']"; + public static final String FILTER_APPLIED_VALUE_LOCATOR = "lib-filter > div > span"; + public static final String MULTIPLE_FILTER_APPLIED_VALUE_LOCATOR = "#requestListFilters > div > span"; + /********************************** Onboarding Participant: Form Locators ***************************************************/ public static final String ONBOARDING_INFO_REGISTER_BUTTON_LOCATOR = "//span[contains(text(), 'Register for this dataspace' )]"; public static final String ONBOARDING_FORM_LOCATOR = "form[id='applicationForm']"; public static final String EMAIL_ADDRESS_LOCATOR = "input[id='email']"; @@ -21,15 +30,8 @@ public class Authority { public static final String SUBMISSION_FORM_BUTTON_LOCATOR = "//button[.//span[text()='Go to the application submission form →']]"; public static final String SUBMIT_APPLICATION_POPUP_LOCATOR = "//*[@id=\"mat-mdc-dialog-title-0\"]"; public static final String ACCOUNT_CIRCLE_ICON = "//mat-icon[contains(text(), 'account_circle' )]"; - public static final String LOGOUT_BUTTON = "//span[contains(text(), 'Logout' )]"; - public static final String CLOSE_ALERT_MESSAGE = "button[aria-label='Close']"; - public static final String KEYCLOAK_USERNAME_INPUT_LOCATOR = "input[id='username']"; - public static final String KEYCLOAK_PASSWORD_INPUT_LOCATOR = "input[id='password']"; - public static final String KEYCLOAK_SIGN_IN_BUTTON_LOCATOR = "input[id='kc-login']"; public static final String ERROR_MESSAGE_LOCATOR = "//span[@id='input-error']"; public static final String PARTICIPANT_LIST_TABLE_LOCATOR = "table[role='table']"; - public static final String REQUEST_LIST_TABLE_CONTENT_PANEL_LOCATOR = "//app-requests/div/div/div/div/div[2]/app-request-list/table/tbody"; - public static final String REQUEST_STATUS_DETAILS_DIALOG_LOCATOR = "//mat-dialog-content[contains(@class, 'mat-mdc-dialog-content')]"; public static final String ONBOARDING_STATUS_PANEL_LOCATOR = "//div/app-onboarding-status/div/div"; public static final String ONBOARDING_REQUESTS_PANEL_LOCATOR = "//div[contains(text(), 'Request submitted' )]"; public static final String GREEN_ICON_LOCATOR = ".mat-icon:nth-child(1)"; @@ -38,7 +40,6 @@ public class Authority { public static final String SEE_REQUEST_DETAILS_BUTTON_LOCATOR = "//span[contains(text(), 'See request details' )]"; public static final String PARTICIPANT_LIST_FILTER_DROPDOWN_OPTIONS_LOCATOR = "mat-option[role='option']"; public static final String PARTICIPANT_LIST_FILTER_INPUT_LOCATOR = "input[matinput]"; - public static final String PARTICIPANT_LIST_APPLY_FILTER_BUTTON = "Apply"; public static final String PARTICIPANT_LIST_PARTICIPANT_NAME_COLUMN_LOCATOR = "//td[contains(@class, " + "'cdk-column-organization')]"; public static final String PARTICIPANT_DETAILS_HEADER_LOCATOR = "//h1[contains(text(), 'Participant Details' )]"; @@ -70,18 +71,19 @@ public class Authority { "div.mat-mdc-select-arrow-wrapper"; public static final String PARTICIPANT_SECOND_FILTER_DROP_DOWN_ARROW_LOCATOR = "#mat-select-value-5"; public static final String FILTER_TABLE = "tbody.mdc-data-table__content"; - public static final String REQUEST_STATUS_COLUMN_FROM_REQUEST_LIST_TABLE_LOCATOR = "td.mat-mdc-cell.mdc-data-table__cell." + - "cdk-cell.cdk-column-status.mat-column-status"; + public static final String REQUEST_STATUS_COLUMN_FROM_REQUEST_LIST_TABLE_LOCATOR = "td.cdk-cell.cdk-column-status.mat-column-status"; public static final String REQUEST_EMAIL_COLUMN_FORM_REQUEST_LIST_TABLE_LOCATOR = "//td[contains(translate(@class, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', " + "'abcdefghijklmnopqrstuvwxyz'), 'email')]"; public static final String REQUEST_LAST_CHANGE_DATE_COLUMN_FORM_REQUEST_LIST_TABLE_LOCATOR = "td.mat-mdc-cell.mdc-data-table__cell.cdk-cell" + ".cdk-column-updateTimestamp.mat-column-updateTimestamp"; - public static final String REQUEST_DATE_COLUMN_FORM_REQUEST_LIST_TABLE_LOCATOR = "td.mat-mdc-cell.mdc-data-table__cell.cdk-cell" + - ".cdk-column-updateTimestamp.mat-column-creationTimestamp"; + public static final String REQUEST_DATE_COLUMN_FORM_REQUEST_LIST_TABLE_LOCATOR = "td.cdk-column-creationTimestamp.mat-column-creationTimestamp"; public static final String PARTICIPANT_TYPE_COLUMN_FROM_PARTICIPANT_LIST_TABLE_LOCATOR = "td.mat-mdc-cell.mdc-data-table__cell.cdk-cell." + "cdk-column-participantType.mat-column-participantType"; public static final String ONBOARDING_DATE_COLUMN_FROM_PARTICIPANT_LIST_TABLE_LOCATOR = " td.mat-mdc-cell.mdc-data-table__cell.cdk-cell." + "cdk-column-updateTimestamp.mat-column-updateTimestamp"; + /********************************** Onboardimg : Request List Locators ***************************************************/ + public static final String REQUEST_LIST_TABLE_CONTENT_PANEL_LOCATOR = "//app-requests/div/div/div/div/div[2]/app-request-list/table/tbody"; + public static final String REQUEST_STATUS_DETAILS_DIALOG_LOCATOR = "//mat-dialog-content[contains(@class, 'mat-mdc-dialog-content')]"; public static final String REQUEST_DATE_HEADER_FORM_REQUEST_LIST_LOCATOR = "//div[contains(text(), ' Request date ' )]"; public static final String REQUEST_DATE_HEADER_FORM_LAST_CHANGE_DATE_LOCATOR = "//div[contains(text(), ' Last change date ' )]"; public static final String REQUEST_DATA_HEADER_FORM_REQUEST_LIST_ARROW_LOCATOR = "//th[contains(@class,'mat-sort-header')]"; @@ -100,6 +102,7 @@ public class Authority { public static final String MESSAGE_WITHIN_REJECT_DIALOGUE_LOCATOR = "//app-confirm-dialog/div[1]/p"; public static final String REJECT_REQUEST_TYPE_REASON_FIELD_LOCATOR = "//app-confirm-dialog/div[1]/mat-form-field/div[1]/div/div[2]/textarea"; public static final String CHOOSE_FILE_BUTTON_LOCATOR = "input[type='file']"; + /*************************************************** Sap: Identity Attributes Locators ***************************************************/ public static final String IDENTITY_ATTRIBUTE_NAME_FIELD_LOCATOR = "input[name='name']"; public static final String IDENTITY_ATTRIBUTE_CODE_FIELD_LOCATOR = "input[name='code']"; public static final String IDENTITY_ATTRIBUTE_ASSIGNABLE_TO_TIER_1_CHECKBOX_LOCATOR = "//label[contains(text(), 'Assignable to Tier 1' )]/preceding-sibling::input"; @@ -120,7 +123,6 @@ public class Authority { public static final String IDENTITY_ATTRIBUTE_LIST_DELETE_DIALOG_LOCATOR = "[role=dialog]"; public static final String IDENTITY_ATTRIBUTE_LIST_DELETE_DIALOG_TITLE_LOCATOR = "h2[mat-dialog-title]"; public static final String IDENTITY_ATTRIBUTE_LIST_DELETE_DIALOG_MESSAGE_LOCATOR = "mat-dialog-content p"; - public static final String FILTER_APPLIED_VALUE_LOCATOR = "lib-filter > div > span"; public static final String EMPTY_LIST_MESSAGE_LOCATOR = "div.p-5.text-center"; public static final String LIST_IDENTITY_ATTRIBUTE_ID_LOCATOR = "//td[@class='mat-mdc-cell mdc-data-table__cell cdk-cell cdk-column-id mat-column-id ng-star-inserted']"; public static final String IDENTITY_ATTRIBUTE_EDIT_BUTTON_LOCATOR = "//span[normalize-space()='Edit Attribute']"; diff --git a/src/main/java/framework/ui/pages/simplOpen/AuthorityPage.java b/src/main/java/framework/ui/pages/simplOpen/AuthorityPage.java index 9bd4ff2dbc584dc5498e239f82c3f123224013fa..df5eac43609aede23f4cd327dbbeeb17f94683b3 100644 --- a/src/main/java/framework/ui/pages/simplOpen/AuthorityPage.java +++ b/src/main/java/framework/ui/pages/simplOpen/AuthorityPage.java @@ -8,12 +8,11 @@ import framework.ui.helpers.UiSetup; import framework.ui.helpers.Utils; import io.cucumber.datatable.DataTable; -import java.util.*; import java.text.SimpleDateFormat; +import java.util.*; import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; -import static configuration.ui.data.simplOpen.Authority.ALERT_DISPLAYING_SUCCESSFUL_APPROVED; -import static configuration.ui.data.simplOpen.Authority.ALERT_DISPLAYING_SUCCESSFUL_REJECTED; +import static configuration.ui.data.simplOpen.Authority.*; import static framework.common.Assertions.*; import static framework.ui.locators.simplOpen.Authority.*; import static framework.ui.locators.simplOpen.Authority.REQUEST_STATUS_LOCATOR; @@ -578,4 +577,30 @@ public class AuthorityPage { throw new AssertionError("The filter: " + filter + " with the value " + valueFilter + " is not displayed."); } } + + /*** + * The method verifies if the tag or label to the right of the "Filter" button was applied successfully. + * This method is used to validate when one more than one filter is applied + * + * @param filter1 + * @param valueFilter1 + * @param filter2 + * @param valueFilter2 + */ + public void verifyFiltersAreAppied(String filter1, String valueFilter1, String filter2, String valueFilter2) { + String filter1ValueApplied = null; + String filter2ValueApplied = null; + String filterValueApplied = null; + filter1ValueApplied = changeFirstLetterToUpperCase(filter1).concat(": ").concat(valueFilter1); + filter2ValueApplied = changeFirstLetterToUpperCase(filter2).concat(": ").concat(valueFilter2); + filterValueApplied = filter2ValueApplied.concat("; ").concat(filter1ValueApplied).concat(";"); + String filterAppliedLocatorValue = page.locator(MULTIPLE_FILTER_APPLIED_VALUE_LOCATOR).innerText().trim(); + if (!filterValueApplied.equals(filterAppliedLocatorValue)) { + throw new AssertionError("The filter: " + filter1 + " with the value " + valueFilter1 + " and " + filter2 + " with the value " + valueFilter2 + " are not displayed."); + } + } + + private String changeFirstLetterToUpperCase(String filter) { + return (filter.toUpperCase().charAt(0) + filter.substring(1, filter.length()).toLowerCase()); + } } diff --git a/src/test/java/features/ui/simplOpen/Authority.feature b/src/test/java/features/ui/simplOpen/Authority.feature index 8b04449b5bfee1565eb2fe700730ed0ea1645bd0..a9cf439d7f19d5714d80b9eb59238ff5aea510a4 100644 --- a/src/test/java/features/ui/simplOpen/Authority.feature +++ b/src/test/java/features/ui/simplOpen/Authority.feature @@ -483,7 +483,6 @@ Feature: Authority When the user presses on the delete button Then the dialog for the delete action is displayed successfully - @TCA32 @SIMPL-3309 @SIMPL-3310 @SIMPL-3311 @bugSIMPL-10276 @SIMPL-3312 @SIMPL-3313 @SIMPL-3314 # Filter by email scenario has a bug associated. Scenario Outline: Participants Management page filtering and resetting the filters: <caseName> @@ -515,3 +514,18 @@ Feature: Authority | Participant type | PARTICIPANT_TYPE_OBTAINED_DYNAMICALLY_FROM_PARTICIPANT_DETAIL_PAGE | | Onboarding Date | ONBOARDING_DATE_OBTAINED_DYNAMICALLY_FROM_PARTICIPANT_DETAIL_PAGE | | Participant Credentials Expiration Date | CREDENTIALS_EXPIRATION_DATE_OBTAINED_DYNAMICALLY_FROM_PARTICIPANT_DETAIL_PAGE | + + @TCA35 @SIMPL-656 + Scenario Outline: The Dashboard Requests List filtering and resetting multiple filters applied : <caseName> + Given the user navigates to the "Dashboard Requests List" page + And the user logs in with a user with "NOTARY" role + When the user filters by "<filter1>" with value "<filterValue1>" + And the user filters by "<filter2>" with value "<filterValue2>" + Then the onboarding requests list is displayed + And the user verifies the "<filter1>" with value "<filterValue1>" and "<filter2>" with value "<filterValue2>" are applied + And the user resets the multiples filters applied successfully + And the onboarding requests list is displayed + + Examples: + | caseName | filter1 | filterValue1 | filter2 | filterValue2 | + | the user filtering by status and by email, then reset the filter | status | Approved | email | dataparticipant_request_accepted@automation.com | diff --git a/src/test/java/stepDefinitions/ui/simplOpen/AuthoritySteps.java b/src/test/java/stepDefinitions/ui/simplOpen/AuthoritySteps.java index 9d39b45e68f5bc3513115d8a4210d3813a10e7fa..3b89e3eaae56b90c99081266bfc138f01bb12934 100644 --- a/src/test/java/stepDefinitions/ui/simplOpen/AuthoritySteps.java +++ b/src/test/java/stepDefinitions/ui/simplOpen/AuthoritySteps.java @@ -22,9 +22,11 @@ import java.util.*; import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; import static configuration.ui.data.simplOpen.Authority.*; +import static configuration.ui.data.simplOpen.Authority.PARTICIPANT_PAGE_RESET_FILTER_BUTTON; import static framework.common.Assertions.*; import static framework.ui.helpers.Utils.clickButtonByLocator; import static framework.ui.locators.simplOpen.Authority.*; +import static framework.ui.locators.simplOpen.Authority.FILTER_APPLIED_VALUE_LOCATOR; import static framework.ui.pages.simplOpen.AuthorityPage.*; import static org.junit.Assert.*; @@ -581,9 +583,11 @@ public class AuthoritySteps { @Then("the onboarding requests list is displayed") public void the_request_list_is_displayed() { + assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TITLE)); assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TABLE_REQUEST_STATUS_COLUMN)); assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TABLE_REQUESTER_EMAIL_COLUMN)); - assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TABLE_REQUEST_DATE_COLUMN)); + assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TABLE_REQUESTER_EMAIL_COLUMN)); + assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TABLE_PARTICIPANT_TYPE_COLUMN)); assertElementIsVisibleByLocator(page.getByText(REQUESTS_LIST_TABLE_LAST_CHANGE_DATE_COLUMN)); authorityPage.verifyThePaginationElementsAreVisible(); } @@ -782,7 +786,7 @@ public class AuthoritySteps { } @Then("the user resets the {string} with the value {string} applied successfully") - public void the_user_resets_the_filters_applied_successfully(String filter, String valueFilter) { + public void the_user_resets_the_filter_applied_successfully(String filter, String valueFilter) { authorityPage.verifyFilterIsAppied(filter, valueFilter, datePasedToString); page.getByText(PARTICIPANT_PAGE_FILTER_BUTTON).click(); assertElementIsVisibleByLocator(page.getByText(PARTICIPANT_PAGE_RESET_FILTER_BUTTON)); @@ -790,6 +794,19 @@ public class AuthoritySteps { assertElementIsNotVisibleByLocator(page.locator(FILTER_APPLIED_VALUE_LOCATOR)); } + @Then("the user verifies the {string} with value {string} and {string} with value {string} are applied") + public void the_user_verifies_filters_applied_successfully(String filter1, String valueFilter1, String filter2, String valueFilter2) { + authorityPage.verifyFiltersAreAppied(filter1, valueFilter1, filter2, valueFilter2); + } + + @Then("the user resets the multiples filters applied successfully") + public void the_user_resets_the_filters_applied_successfully() { + page.getByText(PARTICIPANT_PAGE_FILTER_BUTTON).click(); + assertElementIsVisibleByLocator(page.getByText(PARTICIPANT_PAGE_RESET_FILTER_BUTTON)); + page.getByText(PARTICIPANT_PAGE_RESET_FILTER_BUTTON).click(); + assertElementIsNotVisibleByLocator(page.locator(FILTER_APPLIED_VALUE_LOCATOR)); + } + @Then("the user verifies the following participant details match with the values obtained from the row") public void theUserVerifiesTheElementsInParticipantDetailsPage(DataTable dataTable) { authorityPage.verifyTheValuesObtainedMatchWithValueDisplayed(dataTable, participantDetailNameValue, participantDetailTypeValue, participantDetailOnboardingValue);