Skip to content

Commit f88e740

Browse files
committed
New test cases added for admin reg. pre-application creation
1 parent 1c11198 commit f88e740

9 files changed

+131
-24
lines changed

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

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@ Feature: Testing Admin Registration Pre Application Creation
88
And Click on the Admin Registration Applications button from left navigation bar
99
And Click on the Create Pre-Application button
1010

11+
12+
@Smoke
13+
Scenario Outline: Language verification for all supported languages
14+
When Click on the language button
15+
And Select the "<language>" option
16+
Then User should be able to see all texts on admin registration pre-application page compatible with the "<language>" language
17+
18+
Examples:
19+
| language |
20+
| English |
21+
| Turkish |
22+
23+
1124
@Smoke
1225
Scenario: Successfully create an admin registration pre-application with valid inputs
1326
When Select an institution from the dropdown menu
@@ -16,20 +29,20 @@ Feature: Testing Admin Registration Pre Application Creation
1629
Then I should see a success message confirming the pre-application creation
1730
And I should be redirected to the details page after creation
1831

32+
@Regression
1933
Scenario Outline: Admin registration pre-application creation with invalid reasons
2034
When Select an institution from the dropdown menu
21-
Then Enter "<invalidReason>" and validate the error message "<errorMessage>"
35+
Then Enter "<invalidReason>" and validate the error message "<errorKey>"
2236

2337
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
38+
| invalidReason | errorKey |
39+
| Lorem ipsum dolor sit ameti consectetur | reason_error.too_short |
40+
| 4628742946932863256392563856395839653745 | reason_error.numeric_only |
41+
| Lorem ipsum dolor sit amet,... lorem ipsum | reason_error.special_characters |
42+
| 123456 | reason_error.too_short |
43+
| Invalid reason with special characters: !@#$%^&*() | reason_error.special_characters |
44+
| | reason_error.too_short |
45+
3346
Scenario: Admin registration pre-application creation with excessively long reason
3447
When Select an institution from the dropdown menu
3548
Then Enter a reason with more than 512 characters and validate the error message
@@ -49,6 +62,13 @@ Feature: Testing Admin Registration Pre Application Creation
4962
Then I should see an error message for institution as "Institution is required."
5063
And I should see an error message for reason "This field must be at least 40 characters."
5164

65+
Scenario: Verify first-time created pre-application status is WAITING
66+
When Select an institution from the dropdown menu
67+
And Enter a valid creation reason with text between 40 and 512 characters
68+
And Click the create button for pre-application form
69+
Then I should see that the application status is "Waiting"
70+
71+
5272

5373

5474

src/test/java/org/ays/pages/AdminRegistrationApplicationDetailPage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ public class AdminRegistrationApplicationDetailPage extends BasePage{
1212

1313
@FindBy(css = "input[name='reason']")
1414
private WebElement reasonValue;
15+
16+
@FindBy(css = "input[name='status']")
17+
private WebElement status;
1518
}

src/test/java/org/ays/pages/AdminRegistrationPreApplicationPage.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@
88

99
@Getter
1010
public class AdminRegistrationPreApplicationPage extends BasePage {
11+
@FindBy(css ="h1.text-2xl.font-medium.mb-5")
12+
private WebElement preApplicationPageHeader;
13+
14+
@FindBy(css = "div.space-y-2.col-span-1 label.text-sm.font-medium.leading-none")
15+
private WebElement institutionText;
16+
17+
@FindBy(css = "div.space-y-2.col-span-2 label.text-sm.font-medium.leading-none")
18+
private WebElement creationReasonText;
19+
20+
@FindBy(css = "div.space-y-2.col-span-1 button")
21+
private WebElement selectInstitutionText;
1122

1223
@FindBy(xpath = "//button[.//span[text()='Select Institution']]")
1324
private WebElement selectInstitution;
@@ -18,7 +29,7 @@ public class AdminRegistrationPreApplicationPage extends BasePage {
1829
@FindBy(xpath = "//textarea[@name='reason']")
1930
private WebElement reason;
2031

21-
@FindBy(xpath = "//button[text()='Create']")
32+
@FindBy(xpath = "//button[@type='submit']")
2233
private WebElement create;
2334

2435
@FindBy(css = "li[role='status'].success.group")

src/test/java/org/ays/pages/BasePage.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.ays.browser.AysBrowser;
44
import org.ays.browser.AysPageActions;
55
import org.openqa.selenium.By;
6+
import org.openqa.selenium.NoSuchElementException;
67
import org.openqa.selenium.WebElement;
78
import org.openqa.selenium.support.PageFactory;
89

@@ -15,9 +16,14 @@ public BasePage() {
1516
}
1617

1718
public void selectLanguage(String language) {
18-
String locator = "//span[text()='" + language + "']";
19-
WebElement element = AysBrowser.getWebDriver().findElement(By.xpath(locator));
20-
actions.clickMethod(element);
19+
String locator = language.equals("English") ? "(//span[text()='" + language + "'])[2]" : "//span[text()='" + language + "']";
20+
21+
try {
22+
WebElement element = AysBrowser.getWebDriver().findElement(By.xpath(locator));
23+
actions.clickMethod(element);
24+
} catch (NoSuchElementException e) {
25+
throw new RuntimeException("Language selection failed: " + language + " not found on the page.", e);
26+
}
2127

2228
}
2329

src/test/java/org/ays/pages/LoginPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class LoginPage extends BasePage {
4141
@FindBy(css = "html.dark")
4242
private WebElement darkTheme;
4343

44-
@FindBy(css = "button[role='combobox']")
44+
@FindBy(css = "div.flex.gap-2 button")
4545
private WebElement languageButton;
4646

4747
@FindBy(xpath = "//h3")

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

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,29 @@
44
import io.cucumber.java.en.Then;
55
import io.cucumber.java.en.When;
66
import org.ays.browser.AysPageActions;
7+
import org.ays.enums.AysLanguage;
78
import org.ays.pages.AdminRegistrationApplicationDetailPage;
89
import org.ays.pages.AdminRegistrationApplicationsPage;
910
import org.ays.pages.AdminRegistrationPreApplicationPage;
11+
import org.ays.utilities.AysLocaleStorageUtil;
12+
import org.ays.utilities.AysLocalizationUtil;
1013
import org.ays.utilities.AysRandomUtil;
1114
import org.testng.Assert;
1215

16+
import static org.testng.AssertJUnit.assertEquals;
17+
1318
public class AdminRegistrationPreApplicationCreation {
1419
private final AdminRegistrationApplicationsPage adminRegistrationApplicationsPage;
1520
private final AdminRegistrationApplicationDetailPage adminRegistrationApplicationDetailPage;
1621
private final AdminRegistrationPreApplicationPage adminRegistrationPreApplicationPage;
22+
private final AysLocalizationUtil localizationUtil;
1723
private final AysPageActions pageActions;
18-
private String enteredReason;
1924

2025
public AdminRegistrationPreApplicationCreation() {
2126
this.adminRegistrationApplicationsPage = new AdminRegistrationApplicationsPage();
2227
this.adminRegistrationApplicationDetailPage = new AdminRegistrationApplicationDetailPage();
2328
this.adminRegistrationPreApplicationPage = new AdminRegistrationPreApplicationPage();
29+
this.localizationUtil = new AysLocalizationUtil();
2430
this.pageActions = new AysPageActions();
2531
}
2632

@@ -42,7 +48,7 @@ public void selectAnInstitutionFromTheDropdownMenu() {
4248

4349
@And("Enter a valid creation reason with text between {int} and {int} characters")
4450
public void enterAValidCreationReasonWithTextBetweenAndCharacters(int arg0, int arg1) {
45-
enteredReason = AysRandomUtil.generateReason();
51+
String enteredReason = AysRandomUtil.generateReason();
4652
pageActions.clickMethod(adminRegistrationPreApplicationPage.getReason());
4753
pageActions.sendKeysMethod(adminRegistrationPreApplicationPage.getReason(), enteredReason);
4854
}
@@ -60,27 +66,29 @@ public void iShouldSeeASuccessMessageConfirmingThePreApplicationCreation() {
6066
@And("I should be redirected to the details page after creation")
6167
public void iShouldBeRedirectedToTheDetailsPageAfterCreation() {
6268
Assert.assertTrue(pageActions.isPresent(adminRegistrationApplicationDetailPage.getHeader()));
63-
String actualReason = adminRegistrationApplicationDetailPage.getReasonValue().getAttribute("value");
64-
Assert.assertEquals(enteredReason, actualReason);
6569
}
6670

6771

6872
@Then("Enter {string} and validate the error message {string}")
69-
public void enterAndValidateTheErrorMessage(String invalidReason, String expectedErrorMessage) {
73+
public void enterAndValidateTheErrorMessage(String invalidReason, String errorKey) {
7074
pageActions.clickMethod(adminRegistrationPreApplicationPage.getReason());
7175
pageActions.sendKeysMethod(adminRegistrationPreApplicationPage.getReason(), invalidReason);
7276
pageActions.clickMethod(adminRegistrationPreApplicationPage.getCreate());
7377

78+
7479
String actualErrorMessage = adminRegistrationPreApplicationPage.getErrorMessageForReason().getText();
75-
Assert.assertEquals(actualErrorMessage, expectedErrorMessage,
76-
"Error message mismatch for reason: " + invalidReason);
80+
localizationUtil.validateElementMessage(
81+
errorKey,
82+
actualErrorMessage,
83+
true
84+
);
7785

7886
}
7987

8088
@Then("Enter a reason with more than {int} characters and validate the error message")
8189
public void enterAReasonWithMoreThanCharactersAndValidateTheErrorMessage(int length) {
82-
String longReason = "A".repeat(length + 1);
83-
String expectedErrorMessage = "This field must not exceed " + length + " characters.";
90+
String longReason = AysRandomUtil.generateReason(600);
91+
String expectedErrorMessage = "This field must be at most " + length + " characters.";
8492

8593
pageActions.clickMethod(adminRegistrationPreApplicationPage.getReason());
8694
pageActions.sendKeysMethod(adminRegistrationPreApplicationPage.getReason(), longReason);
@@ -106,4 +114,36 @@ public void iShouldSeeAnErrorMessageForReason(String expectedReasonErrorMessage)
106114
String actualReasonErrorMessage = adminRegistrationPreApplicationPage.getErrorMessageForReason().getText();
107115
Assert.assertEquals(actualReasonErrorMessage, expectedReasonErrorMessage, "Error message did not match.");
108116
}
117+
118+
@Then("I should see that the application status is {string}")
119+
public void iShouldSeeThatTheApplicationStatusIs(String expectedStatus) {
120+
pageActions.waitUntilVisible(adminRegistrationApplicationDetailPage.getStatus());
121+
String actualStatus = adminRegistrationApplicationDetailPage.getStatus().getAttribute("value");
122+
Assert.assertEquals(actualStatus, expectedStatus);
123+
}
124+
125+
@Then("User should be able to see all texts on admin registration pre-application page compatible with the {string} language")
126+
public void userShouldBeAbleToSeeAllTextsOnAdminRegistrationPreApplicationPageCompatibleWithTheLanguage(String language) {
127+
if (language.equalsIgnoreCase("Turkish")) {
128+
AysLocaleStorageUtil.getLanguageFromLocalStorage();
129+
AysLocalizationUtil.setLanguage(AysLanguage.TR);
130+
} else if (language.equalsIgnoreCase("English")) {
131+
AysLocaleStorageUtil.getLanguageFromLocalStorage();
132+
AysLocalizationUtil.setLanguage(AysLanguage.EN);
133+
}
134+
135+
String header = AysLocalizationUtil.getText("admin_reg_pre_application_header");
136+
String institutionLabel = AysLocalizationUtil.getText("admin_reg_pre_application_institution_label");
137+
String selectInstitutionButton = AysLocalizationUtil.getText("admin_reg_pre_application_select_institution_button");
138+
String creationReasonLabel = AysLocalizationUtil.getText("admin_reg_pre_application_creation_reason_label");
139+
String createButton = AysLocalizationUtil.getText("admin_reg_pre_application_creat_button");
140+
141+
142+
assertEquals(adminRegistrationPreApplicationPage.getPreApplicationPageHeader().getText(), header);
143+
assertEquals(adminRegistrationPreApplicationPage.getInstitutionText().getText(), institutionLabel);
144+
assertEquals(adminRegistrationPreApplicationPage.getSelectInstitutionText().getText(), selectInstitutionButton);
145+
assertEquals(adminRegistrationPreApplicationPage.getCreationReasonText().getText(), creationReasonLabel);
146+
assertEquals(adminRegistrationPreApplicationPage.getCreate().getText(), createButton);
147+
148+
}
109149
}

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

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

2626
return phoneNumber.toString();
2727
}
28+
2829
public static String generateReason() {
2930
String reason = FAKER.lorem().paragraph(3);
3031
reason = reason.replaceAll("[^a-zA-Z0-9\\s]", "");
3132
return reason.length() > 512 ? reason.substring(0, 512) : reason;
3233
}
3334

35+
public static String generateReason(int length) {
36+
return FAKER.lorem().characters(length, true, true);
37+
}
38+
3439

3540
}

src/test/resources/ays_ui_elements_en.properties

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,15 @@ login.button.forgot_password=Forgot password?
77
login.validation_error.email_address=Invalid E-mail.
88
login.validation_error.password=This field must be at least 6 characters.
99
login.popup_error_message=Invalid E-mail or Password.
10+
11+
#Admin Registration Pre Application
12+
reason_error.too_short=This field must be at least 40 characters.
13+
reason_error.numeric_only=This field cannot consist only of numbers.
14+
reason_error.special_characters=Text containing special characters cannot be sent.
15+
admin_reg_pre_application_header=Admin Registration Pre-Application Creation
16+
admin_reg_pre_application_institution_label=Institution
17+
admin_reg_pre_application_select_institution_button=Select Institution
18+
admin_reg_pre_application_creation_reason_label=Creation Reason
19+
admin_reg_pre_application_creat_button=Create
20+
21+

src/test/resources/ays_ui_elements_tr.properties

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,13 @@ login.button.forgot_password=Şifrenizi mi unuttunuz?
77
login.validation_error.email_address=Geçersiz e-posta adresi.
88
login.validation_error.password=Bu alan en az 6 karakter olmalıdır.
99
login.popup_error_message=Geçersiz e-posta veya şifre.
10+
11+
#Admin Registration Pre Application
12+
reason_error.too_short=Bu alan en az 40 karakter olmalıdır.
13+
reason_error.numeric_only=Bu alan sadece sayılardan oluşamaz.
14+
reason_error.special_characters=Özel karakter içeren bir metin gönderilemez.
15+
admin_reg_pre_application_header=Kurum Yönetici Kayıt Ön Başvuru Oluşturma
16+
admin_reg_pre_application_institution_label=Kurum
17+
admin_reg_pre_application_select_institution_button=Kurum Seçiniz
18+
admin_reg_pre_application_creation_reason_label=Oluşturma Nedeni
19+
admin_reg_pre_application_creat_button=Oluştur

0 commit comments

Comments
 (0)