Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions src/test/java/org/ays/auth/datasource/UserDataSource.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,23 @@ public static List<String> findAllRoleIdsById(String id) {
}
}

public static String findPasswordIdByUserId(String userId) {
String query = "SELECT ID FROM AYS_USER_PASSWORD WHERE USER_ID = ?";

try (Connection connection = AysDataSource.createConnection();
PreparedStatement preparedStatement = connection.prepareStatement(query)) {

preparedStatement.setString(1, userId);
try (ResultSet resultSet = preparedStatement.executeQuery()) {
if (resultSet.next()) {
return resultSet.getString("ID");
}
}

throw new RuntimeException("No password id found for the given userId: " + userId);
} catch (SQLException exception) {
throw new RuntimeException(exception);
}
}

}
14 changes: 14 additions & 0 deletions src/test/java/org/ays/auth/endpoints/AuthEndpoints.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io.restassured.response.Response;
import lombok.experimental.UtilityClass;
import org.ays.auth.payload.LoginPayload;
import org.ays.auth.payload.PasswordCreatePayload;
import org.ays.auth.payload.PasswordForgotPayload;
import org.ays.auth.payload.TokenInvalidatePayload;
import org.ays.auth.payload.TokenRefreshPayload;
Expand Down Expand Up @@ -60,4 +61,17 @@ public static Response forgotPassword(PasswordForgotPayload passwordForgotPayloa

}

public static Response createPassword(String id, PasswordCreatePayload passwordCreatePayload) {

AysRestAssuredPayload restAssuredRequest = AysRestAssuredPayload.builder()
.httpMethod(HttpMethod.POST)
.url("/api/v1/authentication/password/{id}")
.pathParameter(Map.of("id", id))
.body(passwordCreatePayload)
.build();

return AysRestAssured.perform(restAssuredRequest);

}

}
22 changes: 22 additions & 0 deletions src/test/java/org/ays/auth/payload/PasswordCreatePayload.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.ays.auth.payload;

import lombok.Getter;
import lombok.Setter;
import org.ays.common.util.AysRandomUtil;

@Getter
@Setter
public class PasswordCreatePayload {

private String password;
private String passwordRepeat;

public static PasswordCreatePayload generate() {
PasswordCreatePayload passwordCreatePayload = new PasswordCreatePayload();
String generatedPassword = AysRandomUtil.generatePassword();
passwordCreatePayload.setPassword(generatedPassword);
passwordCreatePayload.setPasswordRepeat(generatedPassword);
return passwordCreatePayload;
}

}
155 changes: 155 additions & 0 deletions src/test/java/org/ays/auth/tests/PasswordCreateTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package org.ays.auth.tests;

import io.restassured.response.Response;
import org.ays.auth.datasource.PermissionDataSource;
import org.ays.auth.datasource.RoleDataSource;
import org.ays.auth.datasource.UserDataSource;
import org.ays.auth.endpoints.AuthEndpoints;
import org.ays.auth.endpoints.RoleEndpoints;
import org.ays.auth.endpoints.UserEndpoints;
import org.ays.auth.model.enums.Permission;
import org.ays.auth.model.enums.SourcePage;
import org.ays.auth.payload.LoginPayload;
import org.ays.auth.payload.PasswordCreatePayload;
import org.ays.auth.payload.PasswordForgotPayload;
import org.ays.auth.payload.RoleCreatePayload;
import org.ays.auth.payload.UserCreatePayload;
import org.ays.common.model.enums.AysErrorMessage;
import org.ays.common.util.AysConfigurationProperty;
import org.ays.common.util.AysDataProvider;
import org.ays.common.util.AysRandomUtil;
import org.ays.common.util.AysResponseSpecs;
import org.testng.annotations.Test;

import java.util.Collections;
import java.util.List;

import static org.hamcrest.Matchers.equalTo;

public class PasswordCreateTest {

@Test(groups = {"Smoke", "Regression"})
public void createPasswordFirstTime() {
LoginPayload loginPayload = LoginPayload.generateAsTestDisasterFoundationAdmin();
String accessToken = this.loginAndGetAccessToken(loginPayload);

List<String> permissionsIds = Collections.singletonList(PermissionDataSource
.findPermissionIdByName(Permission.INSTITUTION_PAGE.getPermission()));

RoleCreatePayload roleCreatePayload = RoleCreatePayload.generate(permissionsIds);
RoleEndpoints.create(roleCreatePayload, accessToken);
String roleId = RoleDataSource.findLastCreatedRoleIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

UserCreatePayload userCreatePayload = UserCreatePayload.generateUserWithARole(roleId);
UserEndpoints.create(userCreatePayload, accessToken);
String userId = UserDataSource.findLastCreatedUserIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

String passwordId = UserDataSource.findPasswordIdByUserId(userId);
PasswordCreatePayload passwordCreatePayload = PasswordCreatePayload.generate();
Response response = AuthEndpoints.createPassword(passwordId, passwordCreatePayload);
response.then()
.spec(AysResponseSpecs.expectSuccessResponseSpec());

loginPayload.setEmailAddress(userCreatePayload.getEmailAddress());
loginPayload.setPassword(passwordCreatePayload.getPassword());
loginPayload.setSourcePage(SourcePage.INSTITUTION);

Response loginCheckResponse = AuthEndpoints.token(loginPayload);
loginCheckResponse.then()
.spec(AysResponseSpecs.expectSuccessResponseSpec())
.spec(AysResponseSpecs.expectGetTokenResponseSpec());
}

@Test(groups = {"Smoke", "Regression"})
public void createPasswordAfterForgotPasswordCalling() {
LoginPayload loginPayload = LoginPayload.generateAsTestDisasterFoundationAdmin();
String accessToken = this.loginAndGetAccessToken(loginPayload);

List<String> permissionsIds = Collections.singletonList(PermissionDataSource
.findPermissionIdByName(Permission.INSTITUTION_PAGE.getPermission()));

RoleCreatePayload roleCreatePayload = RoleCreatePayload.generate(permissionsIds);
RoleEndpoints.create(roleCreatePayload, accessToken);
String roleId = RoleDataSource.findLastCreatedRoleIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

UserCreatePayload userCreatePayload = UserCreatePayload.generateUserWithARole(roleId);
UserEndpoints.create(userCreatePayload, accessToken);

PasswordForgotPayload passwordForgotPayload = new PasswordForgotPayload();
String emailAddress = userCreatePayload.getEmailAddress();
passwordForgotPayload.setEmailAddress(emailAddress);
AuthEndpoints.forgotPassword(passwordForgotPayload);

String userId = UserDataSource.findLastCreatedUserIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

String passwordId = UserDataSource.findPasswordIdByUserId(userId);
PasswordCreatePayload passwordCreatePayload = PasswordCreatePayload.generate();
Response response = AuthEndpoints.createPassword(passwordId, passwordCreatePayload);
response.then()
.spec(AysResponseSpecs.expectSuccessResponseSpec());

loginPayload.setEmailAddress(emailAddress);
loginPayload.setPassword(passwordCreatePayload.getPassword());
loginPayload.setSourcePage(SourcePage.INSTITUTION);

Response loginCheckResponse = AuthEndpoints.token(loginPayload);
loginCheckResponse.then()
.spec(AysResponseSpecs.expectSuccessResponseSpec())
.spec(AysResponseSpecs.expectGetTokenResponseSpec());
}

@Test(groups = {"Regression"}, dataProvider = "invalidIdFormat", dataProviderClass = AysDataProvider.class)
public void createPasswordUsingInvalidPasswordId(String passwordId, AysErrorMessage errorMessage, String field, String type) {
PasswordCreatePayload passwordCreatePayload = PasswordCreatePayload.generate();
Response response = AuthEndpoints.createPassword(passwordId, passwordCreatePayload);
response.then()
.spec(AysResponseSpecs.expectBadRequestResponseSpec())
.spec(AysResponseSpecs.subErrorsSpec(errorMessage, field, type));
}

@Test(groups = {"Regression"}, dataProvider = "invalidPassword", dataProviderClass = AysDataProvider.class)
public void createPasswordWithInvalidPasswordData(String password, AysErrorMessage errorMessage, String field, String type) {
PasswordCreatePayload passwordCreatePayload = PasswordCreatePayload.generate();
passwordCreatePayload.setPassword(password);

String userId = UserDataSource.findLastCreatedUserIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

String passwordId = UserDataSource.findPasswordIdByUserId(userId);
Response response = AuthEndpoints.createPassword(passwordId, passwordCreatePayload);
response.then()
.spec(AysResponseSpecs.expectBadRequestResponseSpec())
.spec(AysResponseSpecs.subErrorsSpec(errorMessage, field, type));
}

@Test(groups = {"Regression"}, dataProvider = "invalidPasswordRepeat", dataProviderClass = AysDataProvider.class)
public void createPasswordWithInvalidPasswordRepeatData(String password, AysErrorMessage errorMessage, String field, String type) {
PasswordCreatePayload passwordCreatePayload = PasswordCreatePayload.generate();
passwordCreatePayload.setPasswordRepeat(password);

String userId = UserDataSource.findLastCreatedUserIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

String passwordId = UserDataSource.findPasswordIdByUserId(userId);
Response response = AuthEndpoints.createPassword(passwordId, passwordCreatePayload);
response.then()
.spec(AysResponseSpecs.expectBadRequestResponseSpec())
.spec(AysResponseSpecs.subErrorsSpec(errorMessage, field, type));
}

@Test(groups = {"Regression"})
public void createPasswordWithMismatchedPasswordAndPasswordRepeatData() {
PasswordCreatePayload passwordCreatePayload = PasswordCreatePayload.generate();
passwordCreatePayload.setPasswordRepeat(AysRandomUtil.generatePassword());

String userId = UserDataSource.findLastCreatedUserIdByInstitutionId(AysConfigurationProperty.TestDisasterFoundation.ID);

String passwordId = UserDataSource.findPasswordIdByUserId(userId);
Response response = AuthEndpoints.createPassword(passwordId, passwordCreatePayload);
response.then()
.spec(AysResponseSpecs.expectBadRequestResponseSpec())
.body("subErrors[0].message", equalTo(AysErrorMessage.PASSWORDS_MUST_BE_EQUAL.getMessage()));
}

private String loginAndGetAccessToken(LoginPayload loginPayload) {
return AuthEndpoints.token(loginPayload).jsonPath().getString("response.accessToken");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public enum AysErrorMessage {
ADMIN_REGISTRATION_APPLICATION_ALREADY_APPROVED_OR_REJECTED("admin registration application was already approved or rejected!"),
ADMIN_REGISTRATION_APPLICATION_ALREADY_REJECTED("admin registration application was already rejected!"),
ADMIN_REGISTRATION_APPLICATION_IS_NOT_COMPLETE("admin registration application is not complete!"),
SOURCE_CITY_DISTRICT_AND_TARGET_CITY_DISTRICT_MUST_BE_DIFFERENT("source city/district and target city/district must be different");
SOURCE_CITY_DISTRICT_AND_TARGET_CITY_DISTRICT_MUST_BE_DIFFERENT("source city/district and target city/district must be different"),
PASSWORDS_MUST_BE_EQUAL("passwords must be equal");

private final String message;

Expand Down
10 changes: 10 additions & 0 deletions src/test/java/org/ays/common/util/AysDataProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,16 @@ public Object[][] invalidPassword() {
};
}

@org.testng.annotations.DataProvider(name = "invalidPasswordRepeat")
public Object[][] invalidPasswordRepeat() {
return new Object[][]{
{"", AysErrorMessage.MUST_NOT_BE_BLANK, "passwordRepeat", "String"},
{null, AysErrorMessage.MUST_NOT_BE_BLANK, "passwordRepeat", "String"},
{AysRandomUtil.generatePassword(1, 7), AysErrorMessage.SIZE_BETWEEN_8_128, "passwordRepeat", "String"},
{AysRandomUtil.generatePassword(129, 135), AysErrorMessage.SIZE_BETWEEN_8_128, "passwordRepeat", "String"}
};
}

@org.testng.annotations.DataProvider(name = "invalidPhoneNumberDataForRegistrationComplete")
public static Object[][] invalidPhoneNumberDataForRegistrationComplete() {
return new Object[][]{
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/testsuite/RegressionSuite.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<class name="org.ays.auth.tests.TokenInvalidateTest"/>
<class name="org.ays.auth.tests.TokenRefreshTest"/>
<class name="org.ays.auth.tests.TokenTest"/>
<class name="org.ays.auth.tests.PasswordCreateTest"/>
<class name="org.ays.auth.tests.PasswordForgotTest"/>
<class name="org.ays.auth.tests.PermissionsListTest"/>
<class name="org.ays.auth.tests.RoleActivateTest"/>
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/testsuite/SmokeSuite.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<class name="org.ays.auth.tests.TokenRefreshTest"/>
<class name="org.ays.auth.tests.TokenTest"/>
<class name="org.ays.auth.tests.InvalidTokensTest"/>
<class name="org.ays.auth.tests.PasswordCreateTest"/>
<class name="org.ays.auth.tests.PasswordForgotTest"/>
<class name="org.ays.auth.tests.PermissionsListTest"/>
<class name="org.ays.auth.tests.RoleActivateTest"/>
Expand Down