From 7190d8796024a619691d398ff8f3dfb4c9229fc6 Mon Sep 17 00:00:00 2001 From: agitrubard Date: Mon, 9 Sep 2024 15:49:23 +0300 Subject: [PATCH 1/3] AYS-438 | Usage of `boolean` Variable Has Been Fixed in `AysPermission` and `AysPermissionEntity` --- src/main/java/org/ays/auth/model/AysPermission.java | 6 +++++- .../java/org/ays/auth/model/entity/AysPermissionEntity.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/ays/auth/model/AysPermission.java b/src/main/java/org/ays/auth/model/AysPermission.java index 90dcb552a..59bec683c 100644 --- a/src/main/java/org/ays/auth/model/AysPermission.java +++ b/src/main/java/org/ays/auth/model/AysPermission.java @@ -21,6 +21,10 @@ public class AysPermission extends BaseDomainModel { private String id; private String name; private AysPermissionCategory category; - private boolean isSuper; + private Boolean isSuper; + + public boolean isSuper() { + return isSuper; + } } diff --git a/src/main/java/org/ays/auth/model/entity/AysPermissionEntity.java b/src/main/java/org/ays/auth/model/entity/AysPermissionEntity.java index 0b58abdcc..9a88ce110 100644 --- a/src/main/java/org/ays/auth/model/entity/AysPermissionEntity.java +++ b/src/main/java/org/ays/auth/model/entity/AysPermissionEntity.java @@ -37,6 +37,6 @@ public class AysPermissionEntity extends BaseEntity { private AysPermissionCategory category; @Column(name = "IS_SUPER") - private boolean isSuper; + private Boolean isSuper; } From 0bf1458dc240dbe764c90e79c00bb7466ae28834 Mon Sep 17 00:00:00 2001 From: agitrubard Date: Mon, 9 Sep 2024 15:50:44 +0300 Subject: [PATCH 2/3] AYS-438 | Role Create and Role Update Flows Have Been Covered with End to End Tests for Adds Super Permissions --- .../auth/controller/AysRoleEndToEndTest.java | 85 +++++++++++++++++++ .../ays/auth/model/AysPermissionBuilder.java | 2 +- .../entity/AysPermissionEntityBuilder.java | 2 +- 3 files changed, 87 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/ays/auth/controller/AysRoleEndToEndTest.java b/src/test/java/org/ays/auth/controller/AysRoleEndToEndTest.java index 23f51ce6e..d8d5cb8be 100644 --- a/src/test/java/org/ays/auth/controller/AysRoleEndToEndTest.java +++ b/src/test/java/org/ays/auth/controller/AysRoleEndToEndTest.java @@ -18,9 +18,12 @@ import org.ays.auth.port.AysPermissionReadPort; import org.ays.auth.port.AysRoleReadPort; import org.ays.auth.port.AysRoleSavePort; +import org.ays.common.model.response.AysErrorResponse; import org.ays.common.model.response.AysPageResponse; import org.ays.common.model.response.AysResponse; import org.ays.common.model.response.AysResponseBuilder; +import org.ays.common.util.AysRandomUtil; +import org.ays.common.util.exception.model.response.AysErrorResponseBuilder; import org.ays.institution.model.Institution; import org.ays.institution.model.InstitutionBuilder; import org.ays.util.AysMockMvcRequestBuilders; @@ -369,6 +372,40 @@ void givenValidRoleCreateRequest_whenRoleCreated_thenReturnSuccess() throws Exce )); } + @Test + void givenRoleCreateRequest_whenRequestHasSuperPermissionsAndUserIsNotSuperAdmin_thenReturnBadRequestError() throws Exception { + + // Initialize + List permissions = permissionReadPort.findAll(); + Set permissionIds = permissions.stream() + .map(AysPermission::getId) + .collect(Collectors.toSet()); + + // Given + AysRoleCreateRequest createRequest = new AysRoleCreateRequestBuilder() + .withName(AysRandomUtil.generateText(10)) + .withPermissionIds(permissionIds) + .build(); + + // Then + String endpoint = BASE_PATH.concat("/role"); + MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders + .post(endpoint, adminToken.getAccessToken(), createRequest); + + AysErrorResponse mockErrorResponse = AysErrorResponseBuilder.BAD_REQUEST; + + aysMockMvc.perform(mockHttpServletRequestBuilder, mockErrorResponse) + .andExpect(AysMockResultMatchersBuilders.status() + .isBadRequest()) + .andExpect(AysMockResultMatchersBuilders.subErrors() + .doesNotHaveJsonPath()); + + // Verify + Optional role = roleReadPort.findByName(createRequest.getName()); + + Assertions.assertFalse(role.isPresent()); + } + @Test void givenValidIdAndRoleUpdateRequest_whenSuperRoleUpdated_thenReturnSuccess() throws Exception { @@ -476,6 +513,54 @@ void givenValidRoleUpdateRequest_whenRoleUpdated_thenReturnSuccess() throws Exce )); } + @Test + void givenValidIdAndRoleUpdateRequest_whenRequestHasSuperPermissionsAndUserIsNotSuperAdmin_thenReturnBadRequestError() throws Exception { + + // Initialize + List permissions = permissionReadPort.findAll(); + Set permissionIds = permissions.stream() + .map(AysPermission::getId) + .collect(Collectors.toSet()); + + AysRole role = roleSavePort.save( + new AysRoleBuilder() + .withValidValues() + .withoutId() + .withName(AysRandomUtil.generateText(10)) + .withPermissions(permissions) + .withInstitution(new InstitutionBuilder().withId(AysValidTestData.Admin.INSTITUTION_ID).build()) + .build() + ); + + // Given + String id = role.getId(); + AysRoleUpdateRequest updateRequest = new AysRoleUpdateRequestBuilder() + .withPermissionIds(permissionIds) + .build(); + + // Then + String endpoint = BASE_PATH.concat("/role/").concat(id); + MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders + .put(endpoint, adminToken.getAccessToken(), updateRequest); + + AysErrorResponse mockErrorResponse = AysErrorResponseBuilder.BAD_REQUEST; + + aysMockMvc.perform(mockHttpServletRequestBuilder, mockErrorResponse) + .andExpect(AysMockResultMatchersBuilders.status() + .isBadRequest()) + .andExpect(AysMockResultMatchersBuilders.subErrors() + .doesNotHaveJsonPath()); + + // Verify + Optional roleFromDatabase = roleReadPort.findById(id); + + Assertions.assertTrue(roleFromDatabase.isPresent()); + Assertions.assertNotEquals(updateRequest.getName(), roleFromDatabase.get().getName()); + Assertions.assertNull(roleFromDatabase.get().getUpdatedUser()); + Assertions.assertNull(roleFromDatabase.get().getUpdatedAt()); + } + + @Test void givenId_whenRoleActivated_thenReturnSuccess() throws Exception { diff --git a/src/test/java/org/ays/auth/model/AysPermissionBuilder.java b/src/test/java/org/ays/auth/model/AysPermissionBuilder.java index 403f5fd2b..7a39b2176 100644 --- a/src/test/java/org/ays/auth/model/AysPermissionBuilder.java +++ b/src/test/java/org/ays/auth/model/AysPermissionBuilder.java @@ -32,7 +32,7 @@ public AysPermissionBuilder withCategory(AysPermissionCategory category) { } public AysPermissionBuilder withIsSuper(boolean isSuper) { - data.setSuper(isSuper); + data.setIsSuper(isSuper); return this; } diff --git a/src/test/java/org/ays/auth/model/entity/AysPermissionEntityBuilder.java b/src/test/java/org/ays/auth/model/entity/AysPermissionEntityBuilder.java index d38274f4f..482894b16 100644 --- a/src/test/java/org/ays/auth/model/entity/AysPermissionEntityBuilder.java +++ b/src/test/java/org/ays/auth/model/entity/AysPermissionEntityBuilder.java @@ -33,7 +33,7 @@ public AysPermissionEntityBuilder withCategory(AysPermissionCategory category) { } public AysPermissionEntityBuilder withIsSuper(boolean isSuper) { - data.setSuper(isSuper); + data.setIsSuper(isSuper); return this; } From ecf2fa956943e8b3283b72124fc65efcef50ebf9 Mon Sep 17 00:00:00 2001 From: agitrubard Date: Mon, 9 Sep 2024 15:55:40 +0300 Subject: [PATCH 3/3] AYS-438 | `AysRandomTestUtil` Has Been Removed Because It's Duplicated --- .../AdminRegistrationApplicationBuilder.java | 3 +- ...nRegistrationApplicationEntityBuilder.java | 3 +- ...rationApplicationCreateRequestBuilder.java | 3 +- ...rationApplicationRejectRequestBuilder.java | 5 +-- .../ays/common/util/AysRandomTestUtil.java | 39 ------------------- 5 files changed, 5 insertions(+), 48 deletions(-) delete mode 100644 src/test/java/org/ays/common/util/AysRandomTestUtil.java diff --git a/src/test/java/org/ays/auth/model/AdminRegistrationApplicationBuilder.java b/src/test/java/org/ays/auth/model/AdminRegistrationApplicationBuilder.java index a633b2ce6..23be89c8b 100644 --- a/src/test/java/org/ays/auth/model/AdminRegistrationApplicationBuilder.java +++ b/src/test/java/org/ays/auth/model/AdminRegistrationApplicationBuilder.java @@ -2,7 +2,6 @@ import org.ays.auth.model.enums.AdminRegistrationApplicationStatus; import org.ays.common.model.TestDataBuilder; -import org.ays.common.util.AysRandomTestUtil; import org.ays.common.util.AysRandomUtil; import org.ays.institution.model.Institution; import org.ays.institution.model.InstitutionBuilder; @@ -27,7 +26,7 @@ public AdminRegistrationApplicationBuilder withValidValues() { .withId(AysRandomUtil.generateUUID()) .withInstitution(institution) .withUser(user) - .withReason(AysRandomTestUtil.generateString(41)) + .withReason(AysRandomUtil.generateText(41)) .withStatus(AdminRegistrationApplicationStatus.WAITING); } diff --git a/src/test/java/org/ays/auth/model/entity/AdminRegistrationApplicationEntityBuilder.java b/src/test/java/org/ays/auth/model/entity/AdminRegistrationApplicationEntityBuilder.java index 3e993226b..99152514a 100644 --- a/src/test/java/org/ays/auth/model/entity/AdminRegistrationApplicationEntityBuilder.java +++ b/src/test/java/org/ays/auth/model/entity/AdminRegistrationApplicationEntityBuilder.java @@ -2,7 +2,6 @@ import org.ays.auth.model.enums.AdminRegistrationApplicationStatus; import org.ays.common.model.TestDataBuilder; -import org.ays.common.util.AysRandomTestUtil; import org.ays.common.util.AysRandomUtil; import org.ays.institution.model.entity.InstitutionEntity; import org.ays.institution.model.entity.InstitutionEntityBuilder; @@ -27,7 +26,7 @@ public AdminRegistrationApplicationEntityBuilder withValidValues() { .withStatus(AdminRegistrationApplicationStatus.WAITING) .withUser(userEntity) .withInstitution(institutionEntity) - .withReason(AysRandomTestUtil.generateString(41)); + .withReason(AysRandomUtil.generateText(41)); } public AdminRegistrationApplicationEntityBuilder withId(String id) { diff --git a/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationCreateRequestBuilder.java b/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationCreateRequestBuilder.java index f9eb5465b..0c05db517 100644 --- a/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationCreateRequestBuilder.java +++ b/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationCreateRequestBuilder.java @@ -1,7 +1,6 @@ package org.ays.auth.model.request; import org.ays.common.model.TestDataBuilder; -import org.ays.common.util.AysRandomTestUtil; import org.ays.common.util.AysRandomUtil; public class AdminRegistrationApplicationCreateRequestBuilder extends TestDataBuilder { @@ -13,7 +12,7 @@ public AdminRegistrationApplicationCreateRequestBuilder() { public AdminRegistrationApplicationCreateRequestBuilder withValidValues() { return this .withInstitutionId(AysRandomUtil.generateUUID()) - .withReason(AysRandomTestUtil.generateString(50)); + .withReason(AysRandomUtil.generateText(50)); } public AdminRegistrationApplicationCreateRequestBuilder withInstitutionId(String institutionId) { diff --git a/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationRejectRequestBuilder.java b/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationRejectRequestBuilder.java index e5556b763..b55de96e1 100644 --- a/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationRejectRequestBuilder.java +++ b/src/test/java/org/ays/auth/model/request/AdminRegistrationApplicationRejectRequestBuilder.java @@ -1,7 +1,7 @@ package org.ays.auth.model.request; import org.ays.common.model.TestDataBuilder; -import org.ays.common.util.AysRandomTestUtil; +import org.ays.common.util.AysRandomUtil; public class AdminRegistrationApplicationRejectRequestBuilder extends TestDataBuilder { @@ -11,10 +11,9 @@ public AdminRegistrationApplicationRejectRequestBuilder() { public AdminRegistrationApplicationRejectRequestBuilder withValidValues() { return this - .withRejectReason(AysRandomTestUtil.generateString(50)); + .withRejectReason(AysRandomUtil.generateText(50)); } - public AdminRegistrationApplicationRejectRequestBuilder withRejectReason(String rejectReason) { data.setRejectReason(rejectReason); return this; diff --git a/src/test/java/org/ays/common/util/AysRandomTestUtil.java b/src/test/java/org/ays/common/util/AysRandomTestUtil.java deleted file mode 100644 index d7057d6e3..000000000 --- a/src/test/java/org/ays/common/util/AysRandomTestUtil.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.ays.common.util; - -import lombok.experimental.UtilityClass; - -import java.util.Random; - -/** - * Utility class for generating random string. - * This class provides methods for generating a random string with a specified length. - *

- * The class uses the Java built-in {@link Random} class for generating random string. - *

- * Note that this class is a utility class and should not be instantiated. - * All methods are static and can be called using the class name. - */ -@UtilityClass -public class AysRandomTestUtil { - - private static final Random RANDOM = new Random(); - - - /** - * Generates a random string with the specified length. - * The generated string will be a random string with the specified length, consisting of uppercase and lowercase - * letters and digits. - * - * @param length the length of the generated string - * @return a random string with the specified length - */ - public static String generateString(int length) { - String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - StringBuilder stringBuilder = new StringBuilder(length); - for (int i = 0; i < length; i++) { - stringBuilder.append(characters.charAt(RANDOM.nextInt(characters.length()))); - } - return stringBuilder.toString(); - } - -}