Skip to content

Commit 1c11198

Browse files
committed
AYS-667 | Added tests for admin registration pre-application creation
1 parent dcb88d5 commit 1c11198

10 files changed

+249
-2
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
@Regression
2+
Feature: Testing Admin Registration Pre Application Creation
3+
4+
Background:
5+
Given Open the institution login page
6+
When Enter super admin email address and password
7+
And Click on the Login button
8+
And Click on the Admin Registration Applications button from left navigation bar
9+
And Click on the Create Pre-Application button
10+
11+
@Smoke
12+
Scenario: Successfully create an admin registration pre-application with valid inputs
13+
When Select an institution from the dropdown menu
14+
And Enter a valid creation reason with text between 40 and 512 characters
15+
And Click the create button for pre-application form
16+
Then I should see a success message confirming the pre-application creation
17+
And I should be redirected to the details page after creation
18+
19+
Scenario Outline: Admin registration pre-application creation with invalid reasons
20+
When Select an institution from the dropdown menu
21+
Then Enter "<invalidReason>" and validate the error message "<errorMessage>"
22+
23+
Examples:
24+
| invalidReason | errorMessage |
25+
| Lorem ipsum dolor sit ameti consectetur | This field must be at least 40 characters. |
26+
| 4628742946932863256392563856395839653745 | This field cannot consist only of numbers. |
27+
| Lorem ipsum dolor sit amet,... lorem ipsum | Text containing special characters cannot be sent. |
28+
| 123456 | This field must be at least 40 characters. |
29+
| Invalid reason with special characters: !@#$%^&*() | Text containing special characters cannot be sent. |
30+
| | This field must be at least 40 characters. |
31+
32+
@Disabled
33+
Scenario: Admin registration pre-application creation with excessively long reason
34+
When Select an institution from the dropdown menu
35+
Then Enter a reason with more than 512 characters and validate the error message
36+
37+
Scenario: Attempt to create an admin registration pre-application without selecting an institution
38+
And Enter a valid creation reason with text between 40 and 512 characters
39+
When Click the create button for pre-application form
40+
Then I should see an error message for institution as "Institution is required."
41+
42+
Scenario: Attempt to create an admin registration pre-application without providing a creation reason
43+
When Select an institution from the dropdown menu
44+
And Click the create button for pre-application form
45+
Then I should see an error message for reason "This field must be at least 40 characters."
46+
47+
Scenario: Attempt to create an admin registration pre-application with missing institution and reason
48+
When Click the create button for pre-application form
49+
Then I should see an error message for institution as "Institution is required."
50+
And I should see an error message for reason "This field must be at least 40 characters."
51+
52+
53+
54+
55+
56+
57+

src/test/java/org/ays/feature/Logout.feature

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
@Regression
12
Feature: Testing Logout
23

34
Background:
45
Given Open the institution login page
56
When Enter the email address and password
67
And Click on the Login button
78

9+
@Smoke
810
Scenario: Validating logout functionality
911
When Click on the profile button
1012
And Click on the logout button
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.ays.pages;
2+
3+
import lombok.Getter;
4+
import org.openqa.selenium.WebElement;
5+
import org.openqa.selenium.support.FindBy;
6+
7+
@Getter
8+
public class AdminRegistrationApplicationDetailPage extends BasePage{
9+
10+
@FindBy(css = "h1.text-2xl.font-bold")
11+
private WebElement header;
12+
13+
@FindBy(css = "input[name='reason']")
14+
private WebElement reasonValue;
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.ays.pages;
2+
3+
import lombok.Getter;
4+
import org.openqa.selenium.WebElement;
5+
import org.openqa.selenium.support.FindBy;
6+
7+
@Getter
8+
public class AdminRegistrationApplicationsPage extends BasePage {
9+
10+
@FindBy(css = "a[href*=\"admin-registration-applications\"]")
11+
private WebElement adminRegistrationApplications;
12+
13+
@FindBy(xpath = "//button[contains(text(), 'Create Pre-Application')]")
14+
private WebElement createPreApplication;
15+
16+
17+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.ays.pages;
2+
3+
import lombok.Getter;
4+
import org.openqa.selenium.WebElement;
5+
import org.openqa.selenium.support.FindBy;
6+
7+
import java.util.List;
8+
9+
@Getter
10+
public class AdminRegistrationPreApplicationPage extends BasePage {
11+
12+
@FindBy(xpath = "//button[.//span[text()='Select Institution']]")
13+
private WebElement selectInstitution;
14+
15+
@FindBy(xpath = "//div[@role='listbox']//div[@role='option']")
16+
private List<WebElement> institutionOptions;
17+
18+
@FindBy(xpath = "//textarea[@name='reason']")
19+
private WebElement reason;
20+
21+
@FindBy(xpath = "//button[text()='Create']")
22+
private WebElement create;
23+
24+
@FindBy(css = "li[role='status'].success.group")
25+
private WebElement successMessage;
26+
27+
@FindBy(xpath = "//div[contains(@class, 'col-span-2')]//p[contains(@class, 'text-destructive')]")
28+
private WebElement errorMessageForReason;
29+
30+
@FindBy(xpath = "//div[contains(@class, 'col-span-1')]//p[contains(@class, 'text-destructive')]")
31+
private WebElement errorMessageForInstitution;
32+
}

src/test/java/org/ays/runners/RunnerForRegressionTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
@CucumberOptions(
66
plugin = {"pretty"},
7-
tags = "@Regression", publish = true
7+
tags = "@Regression and not @Disabled",
8+
publish = true
89
)
910
public class RunnerForRegressionTest extends AysAbstractTestNGCucumberTests {
1011
}

src/test/java/org/ays/runners/RunnerForSmokeTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
@CucumberOptions(
66
plugin = {"pretty"},
7-
tags = "@Smoke", publish = true
7+
tags = "@Smoke and not @Disabled",
8+
publish = true
89
)
910
public class RunnerForSmokeTest extends AysAbstractTestNGCucumberTests {
1011
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package org.ays.step_definitions;
2+
3+
import io.cucumber.java.en.And;
4+
import io.cucumber.java.en.Then;
5+
import io.cucumber.java.en.When;
6+
import org.ays.browser.AysPageActions;
7+
import org.ays.pages.AdminRegistrationApplicationDetailPage;
8+
import org.ays.pages.AdminRegistrationApplicationsPage;
9+
import org.ays.pages.AdminRegistrationPreApplicationPage;
10+
import org.ays.utilities.AysRandomUtil;
11+
import org.testng.Assert;
12+
13+
public class AdminRegistrationPreApplicationCreation {
14+
private final AdminRegistrationApplicationsPage adminRegistrationApplicationsPage;
15+
private final AdminRegistrationApplicationDetailPage adminRegistrationApplicationDetailPage;
16+
private final AdminRegistrationPreApplicationPage adminRegistrationPreApplicationPage;
17+
private final AysPageActions pageActions;
18+
private String enteredReason;
19+
20+
public AdminRegistrationPreApplicationCreation() {
21+
this.adminRegistrationApplicationsPage = new AdminRegistrationApplicationsPage();
22+
this.adminRegistrationApplicationDetailPage = new AdminRegistrationApplicationDetailPage();
23+
this.adminRegistrationPreApplicationPage = new AdminRegistrationPreApplicationPage();
24+
this.pageActions = new AysPageActions();
25+
}
26+
27+
@And("Click on the Admin Registration Applications button from left navigation bar")
28+
public void clickOnTheAdminRegistrationApplicationsButtonFromLeftNavigationBar() {
29+
pageActions.clickMethod(adminRegistrationApplicationsPage.getAdminRegistrationApplications());
30+
}
31+
32+
@And("Click on the Create Pre-Application button")
33+
public void clickOnTheCreatePreApplicationButton() {
34+
pageActions.clickMethod(adminRegistrationApplicationsPage.getCreatePreApplication());
35+
}
36+
37+
@When("Select an institution from the dropdown menu")
38+
public void selectAnInstitutionFromTheDropdownMenu() {
39+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getSelectInstitution());
40+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getInstitutionOptions().get(0));
41+
}
42+
43+
@And("Enter a valid creation reason with text between {int} and {int} characters")
44+
public void enterAValidCreationReasonWithTextBetweenAndCharacters(int arg0, int arg1) {
45+
enteredReason = AysRandomUtil.generateReason();
46+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getReason());
47+
pageActions.sendKeysMethod(adminRegistrationPreApplicationPage.getReason(), enteredReason);
48+
}
49+
50+
@And("Click the create button for pre-application form")
51+
public void clickTheCreateButtonForPreApplicationForm() {
52+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getCreate());
53+
}
54+
55+
@Then("I should see a success message confirming the pre-application creation")
56+
public void iShouldSeeASuccessMessageConfirmingThePreApplicationCreation() {
57+
Assert.assertTrue(pageActions.isPresent(adminRegistrationPreApplicationPage.getSuccessMessage()));
58+
}
59+
60+
@And("I should be redirected to the details page after creation")
61+
public void iShouldBeRedirectedToTheDetailsPageAfterCreation() {
62+
Assert.assertTrue(pageActions.isPresent(adminRegistrationApplicationDetailPage.getHeader()));
63+
String actualReason = adminRegistrationApplicationDetailPage.getReasonValue().getAttribute("value");
64+
Assert.assertEquals(enteredReason, actualReason);
65+
}
66+
67+
68+
@Then("Enter {string} and validate the error message {string}")
69+
public void enterAndValidateTheErrorMessage(String invalidReason, String expectedErrorMessage) {
70+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getReason());
71+
pageActions.sendKeysMethod(adminRegistrationPreApplicationPage.getReason(), invalidReason);
72+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getCreate());
73+
74+
String actualErrorMessage = adminRegistrationPreApplicationPage.getErrorMessageForReason().getText();
75+
Assert.assertEquals(actualErrorMessage, expectedErrorMessage,
76+
"Error message mismatch for reason: " + invalidReason);
77+
78+
}
79+
80+
@Then("Enter a reason with more than {int} characters and validate the error message")
81+
public void enterAReasonWithMoreThanCharactersAndValidateTheErrorMessage(int length) {
82+
String longReason = "A".repeat(length + 1);
83+
String expectedErrorMessage = "This field must not exceed " + length + " characters.";
84+
85+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getReason());
86+
pageActions.sendKeysMethod(adminRegistrationPreApplicationPage.getReason(), longReason);
87+
pageActions.clickMethod(adminRegistrationPreApplicationPage.getCreate());
88+
89+
String actualErrorMessage = adminRegistrationPreApplicationPage.getErrorMessageForReason().getText();
90+
91+
Assert.assertEquals(actualErrorMessage, expectedErrorMessage,
92+
"The error message did not match the expected message for reason length: " + longReason.length());
93+
}
94+
95+
96+
@Then("I should see an error message for institution as {string}")
97+
public void iShouldSeeAnErrorMessageForInstitutionAs(String expectedInstitutionErrorMessage) {
98+
String actualInstitutionErrorMessage = adminRegistrationPreApplicationPage.getErrorMessageForInstitution().getText();
99+
Assert.assertEquals(actualInstitutionErrorMessage, expectedInstitutionErrorMessage,
100+
"Error message did not match.");
101+
102+
}
103+
104+
@Then("I should see an error message for reason {string}")
105+
public void iShouldSeeAnErrorMessageForReason(String expectedReasonErrorMessage) {
106+
String actualReasonErrorMessage = adminRegistrationPreApplicationPage.getErrorMessageForReason().getText();
107+
Assert.assertEquals(actualReasonErrorMessage, expectedReasonErrorMessage, "Error message did not match.");
108+
}
109+
}

src/test/java/org/ays/step_definitions/Login.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,11 @@ public void refreshTokenGeneratesANewAccessTokenAndTheUserContinuesToLogin() {
180180
}
181181

182182

183+
@When("Enter super admin email address and password")
184+
public void enterSuperAdminEmailAddressAndPassword() {
185+
pageActions.sendKeysMethod(loginPage.getLoginEmailAddress(), AysConfigurationProperty
186+
.TestVolunteerFoundation.SuperAdmin.EMAIL_ADDRESS);
187+
pageActions.sendKeysMethod(loginPage.getLoginPassword(), AysConfigurationProperty
188+
.TestVolunteerFoundation.SuperAdmin.PASSWORD);
189+
}
183190
}

src/test/java/org/ays/utilities/AysRandomUtil.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,11 @@ public static String generatePhoneNumber() {
2525

2626
return phoneNumber.toString();
2727
}
28+
public static String generateReason() {
29+
String reason = FAKER.lorem().paragraph(3);
30+
reason = reason.replaceAll("[^a-zA-Z0-9\\s]", "");
31+
return reason.length() > 512 ? reason.substring(0, 512) : reason;
32+
}
33+
2834

2935
}

0 commit comments

Comments
 (0)