From c3cc929f6550693aabeeace774c422a8a0543287 Mon Sep 17 00:00:00 2001 From: Michael Kimberlin Date: Thu, 11 Apr 2024 20:09:56 -0500 Subject: [PATCH 1/5] Fix permission serialization and display --- .../services/permissions/Permission.java | 15 ++++++++- .../permissions/PermissionSerializer.java | 31 +++++++++++++++++++ .../RolePermissionController.java | 4 +-- .../role_permissions/RolePermissionDTO.java | 18 +++++------ web-ui/src/context/selectors.js | 4 +-- web-ui/src/pages/PermissionsPage.jsx | 12 ++++--- 6 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionSerializer.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java index 40d95edb63..98d8ce70af 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java @@ -1,8 +1,11 @@ package com.objectcomputing.checkins.services.permissions; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; import io.micronaut.core.annotation.Introspected; @Introspected +@JsonSerialize(using = PermissionSerializer.class) public enum Permission { CAN_VIEW_FEEDBACK_REQUEST("View feedback requests", "Feedback"), CAN_CREATE_FEEDBACK_REQUEST("Create feedback requests", "Feedback"), @@ -33,7 +36,6 @@ public enum Permission { this.category = category; } - public String getDescription() { return description; } @@ -41,5 +43,16 @@ public String getDescription() { public String getCategory() { return category; } + + // Use the fromName method as @JsonCreator + @JsonCreator + public static Permission fromName(String name) { + for (Permission permission : values()) { + if (permission.name().equalsIgnoreCase(name)) { + return permission; + } + } + throw new UnsupportedOperationException(String.format("Unknown permission: '%s'", name)); + } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionSerializer.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionSerializer.java new file mode 100644 index 0000000000..af407b65d6 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionSerializer.java @@ -0,0 +1,31 @@ +package com.objectcomputing.checkins.services.permissions; + +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class PermissionSerializer extends StdSerializer { + + public PermissionSerializer() { + super(Permission.class); + } + + public PermissionSerializer(Class t) { + super(t); + } + + public void serialize( + Permission permission, JsonGenerator generator, SerializerProvider provider) + throws IOException { + generator.writeStartObject(); + generator.writeFieldName("permission"); + generator.writeString(permission.name()); + generator.writeFieldName("description"); + generator.writeString(permission.getDescription()); + generator.writeFieldName("category"); + generator.writeString(permission.getCategory()); + generator.writeEndObject(); + } +} \ No newline at end of file diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java index 03e6b2449e..270a751955 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java @@ -58,7 +58,7 @@ public Mono>> getAllRolePermission @RequiredPermission(Permission.CAN_ASSIGN_ROLE_PERMISSIONS) @Post("/") public Mono> save(@Body @Valid RolePermissionDTO rolePermission) { - return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), rolePermission.getPermissionId())) + return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), rolePermission.getPermission())) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) .map(savedRolePermission -> (HttpResponse) HttpResponse .created(fromEntity(savedRolePermission))) @@ -69,7 +69,7 @@ public Mono> save(@Body @Valid RolePermissionDTO @Delete("/") public Mono> delete(@Body RolePermissionDTO dto) { - return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), dto.getPermissionId())) + return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), dto.getPermission())) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) .subscribeOn(scheduler).thenReturn(HttpResponse.ok()); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java index d62041282c..f5bbddba82 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java @@ -14,12 +14,12 @@ public class RolePermissionDTO { @Schema(description = "id of the role", required = true) private UUID roleId; - @Schema(description = "id of the permission", required = true) - private Permission permissionId; + @Schema(description = "the permission", required = true) + private Permission permission; - public RolePermissionDTO(UUID roleId, Permission permissionId) { + public RolePermissionDTO(UUID roleId, Permission permission) { this.roleId = roleId; - this.permissionId = permissionId; + this.permission = permission; } public UUID getRoleId() { @@ -30,19 +30,19 @@ public void setRoleId(UUID roleId) { this.roleId = roleId; } - public Permission getPermissionId() { - return permissionId; + public Permission getPermission() { + return permission; } - public void setPermissionId(Permission permissionId) { - this.permissionId = permissionId; + public void setPermission(Permission permission) { + this.permission = permission; } @Override public String toString() { final StringBuilder sb = new StringBuilder("RolePermissionCreateDTO{"); sb.append("roleId=").append(roleId); - sb.append(", permissionId=").append(permissionId); + sb.append(", permission=").append(permission); sb.append('}'); return sb.toString(); } diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js index ea11c22c87..8b72128ec8 100644 --- a/web-ui/src/context/selectors.js +++ b/web-ui/src/context/selectors.js @@ -43,12 +43,12 @@ export const selectIsAdmin = createSelector( export const selectHasPermissionAssignmentPermission = createSelector( selectUserProfile, (userProfile) => - userProfile && userProfile.role && userProfile.permissions.some((p) => p.length > 0 && p.includes("CAN_ASSIGN_ROLE_PERMISSIONS")) + userProfile && userProfile.role && userProfile.permissions.some((p) => p?.permission?.includes("CAN_ASSIGN_ROLE_PERMISSIONS")) ); export const selectHasReportPermission = createSelector( selectUserProfile, - (userProfile) => userProfile && userProfile.role && userProfile.permissions.some((p) => p.length > 0 && p.includes("REPORT")) + (userProfile) => userProfile && userProfile.role && userProfile.permissions.some((p) => p?.permission?.includes("REPORT")) ); diff --git a/web-ui/src/pages/PermissionsPage.jsx b/web-ui/src/pages/PermissionsPage.jsx index 3c27c371e7..8be201b0b7 100644 --- a/web-ui/src/pages/PermissionsPage.jsx +++ b/web-ui/src/pages/PermissionsPage.jsx @@ -50,7 +50,11 @@ const PermissionEditor = ({ ); }; -const isPermissionEnabled = (rolePermissions, permission) => rolePermissions.some((current) => current.id === permission.id); +const isPermissionEnabled = (rolePermissions, permission) => { + return rolePermissions.some((current) => { + return current.permission === permission.permission; + }); +} const EditPermissionsPage = () => { const { state } = useContext(AppContext); @@ -102,7 +106,7 @@ const EditPermissionsPage = () => { }; const addPermissionForRole = async (role, permission) => { - let newSchema = { roleId: role.id, permissionId: permission.id }; + let newSchema = { roleId: role.id, permission: permission.permission }; let res = await postRolePermission(newSchema, csrf); const snackPayload = res.error ? { severity: "warning", toast: `Problem adding ${permission.description} to ${role.role}` } @@ -114,7 +118,7 @@ const EditPermissionsPage = () => { }; const deletePermissionForRole = async (role, permission) => { - let newSchema = { roleId: role.id, permissionId: permission.id }; + let newSchema = { roleId: role.id, permission: permission.permission }; let res = await deleteRolePermission(newSchema, csrf); const snackPayload = res.error ? { severity: "warning", toast: `Problem deleting ${permission.description} from ${role.role}` } @@ -162,7 +166,7 @@ const EditPermissionsPage = () => {

{category?.category}:

{ category?.permissions?.map((permission)=> ( Date: Thu, 11 Apr 2024 20:16:43 -0500 Subject: [PATCH 2/5] Update snapshots and correct test initial state --- web-ui/src/components/menu/Menu.test.jsx | 2 +- .../PermissionsPage.test.jsx.snap | 65 +------------------ 2 files changed, 4 insertions(+), 63 deletions(-) diff --git a/web-ui/src/components/menu/Menu.test.jsx b/web-ui/src/components/menu/Menu.test.jsx index b4eae5c7b5..f7ac807dc6 100644 --- a/web-ui/src/components/menu/Menu.test.jsx +++ b/web-ui/src/components/menu/Menu.test.jsx @@ -30,7 +30,7 @@ const adminState = { workEmail: "test@tester.com", }, role: ["MEMBER", "ADMIN"], - permissions: ["CAN_VIEW_SKILLS_REPORT"], + permissions: [{permission:"CAN_VIEW_SKILLS_REPORT"}], imageUrl: "https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg", }, diff --git a/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap b/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap index eaf6783a4b..6894f25c85 100644 --- a/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap +++ b/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap @@ -5,68 +5,9 @@ exports[`renders correctly 1`] = `
-
-
- -
- - - - -
-
-
+

+ You do not have permission to view this page. +

`; From 865e58859ac31c087526123b303d3d7a50100067 Mon Sep 17 00:00:00 2001 From: Michael Kimberlin Date: Thu, 11 Apr 2024 20:24:06 -0500 Subject: [PATCH 3/5] Actually fix the tests --- web-ui/src/pages/PermissionsPage.test.jsx | 2 +- .../PermissionsPage.test.jsx.snap | 65 ++++++++++++++++++- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/web-ui/src/pages/PermissionsPage.test.jsx b/web-ui/src/pages/PermissionsPage.test.jsx index 25d31c25a5..1da6c2294c 100644 --- a/web-ui/src/pages/PermissionsPage.test.jsx +++ b/web-ui/src/pages/PermissionsPage.test.jsx @@ -7,7 +7,7 @@ const initialState = { userProfile: { name: "holmes", role: ["PDL"], - permissions: ["CAN_ASSIGN_ROLE_PERMISSIONS"], + permissions: [{permission: "CAN_ASSIGN_ROLE_PERMISSIONS"}], imageUrl: "https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg", }, diff --git a/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap b/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap index 6894f25c85..eaf6783a4b 100644 --- a/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap +++ b/web-ui/src/pages/__snapshots__/PermissionsPage.test.jsx.snap @@ -5,9 +5,68 @@ exports[`renders correctly 1`] = `
-

- You do not have permission to view this page. -

+
+
+ +
+ + + + +
+
+
`; From 2c5722515af84ce83f200f29baeabc200f34e52b Mon Sep 17 00:00:00 2001 From: Michael Kimberlin Date: Thu, 11 Apr 2024 21:30:06 -0500 Subject: [PATCH 4/5] Adjust permission deserialization by client to fix tests --- .../services/permissions/PermissionDTO.java | 68 +++++++++++++++++++ .../RolePermissionController.java | 7 +- .../role_permissions/RolePermissionDTO.java | 9 +-- .../RolePermissionServicesImpl.java | 3 +- .../RolePermissionsResponseDTO.java | 7 +- .../PermissionsControllerTest.java | 15 ++-- .../RolePermissionsControllerTest.java | 10 +-- 7 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionDTO.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionDTO.java new file mode 100644 index 0000000000..d17fef92c8 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionDTO.java @@ -0,0 +1,68 @@ +package com.objectcomputing.checkins.services.permissions; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.micronaut.core.annotation.Introspected; + +import java.util.Objects; + +@Introspected +public class PermissionDTO { + + private String permission; + private String description; + + public PermissionDTO() {} + + public PermissionDTO(String permission, String description, String category) { + this.permission = permission; + this.description = description; + this.category = category; + } + + private String category; + + public PermissionDTO(Permission permission) { + this.permission = permission.name(); + this.description = permission.getDescription(); + this.category = permission.getCategory(); + } + + public String getPermission() { + return permission; + } + + public void setPermission(String permission) { + this.permission = permission; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PermissionDTO that = (PermissionDTO) o; + return Objects.equals(permission, that.permission) && Objects.equals(description, that.description) && Objects.equals(category, that.category); + } + + @Override + public int hashCode() { + return Objects.hash(permission, description, category); + } +} + diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java index 270a751955..129e503dfc 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java @@ -2,6 +2,7 @@ ; import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.PermissionDTO; import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -58,7 +59,7 @@ public Mono>> getAllRolePermission @RequiredPermission(Permission.CAN_ASSIGN_ROLE_PERMISSIONS) @Post("/") public Mono> save(@Body @Valid RolePermissionDTO rolePermission) { - return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), rolePermission.getPermission())) + return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), Permission.fromName(rolePermission.getPermission().getPermission()))) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) .map(savedRolePermission -> (HttpResponse) HttpResponse .created(fromEntity(savedRolePermission))) @@ -69,12 +70,12 @@ public Mono> save(@Body @Valid RolePermissionDTO @Delete("/") public Mono> delete(@Body RolePermissionDTO dto) { - return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), dto.getPermission())) + return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), Permission.fromName(dto.getPermission().getPermission()))) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) .subscribeOn(scheduler).thenReturn(HttpResponse.ok()); } private RolePermissionDTO fromEntity(RolePermission rolePermission) { - return new RolePermissionDTO(rolePermission.getRoleId(), rolePermission.getPermission()); + return new RolePermissionDTO(rolePermission.getRoleId(), new PermissionDTO(rolePermission.getPermission())); } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java index f5bbddba82..21055e5c97 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java @@ -1,6 +1,7 @@ package com.objectcomputing.checkins.services.role.role_permissions; import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.PermissionDTO; import io.micronaut.core.annotation.Introspected; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,9 +16,9 @@ public class RolePermissionDTO { private UUID roleId; @Schema(description = "the permission", required = true) - private Permission permission; + private PermissionDTO permission; - public RolePermissionDTO(UUID roleId, Permission permission) { + public RolePermissionDTO(UUID roleId, PermissionDTO permission) { this.roleId = roleId; this.permission = permission; } @@ -30,11 +31,11 @@ public void setRoleId(UUID roleId) { this.roleId = roleId; } - public Permission getPermission() { + public PermissionDTO getPermission() { return permission; } - public void setPermission(Permission permission) { + public void setPermission(PermissionDTO permission) { this.permission = permission; } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionServicesImpl.java index 6d2df5f73e..2a274d5453 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionServicesImpl.java @@ -1,6 +1,7 @@ package com.objectcomputing.checkins.services.role.role_permissions; import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.PermissionDTO; import com.objectcomputing.checkins.services.permissions.PermissionServices; import com.objectcomputing.checkins.services.role.Role; import com.objectcomputing.checkins.services.role.RoleServices; @@ -45,7 +46,7 @@ public List findAll() { rolePermissionsResponseDTO.setRoleId(role.getId()); rolePermissionsResponseDTO.setRole(role.getRole()); rolePermissionsResponseDTO.setDescription(role.getDescription()); - rolePermissionsResponseDTO.setPermissions(permissionsAssociatedWithRole); + rolePermissionsResponseDTO.setPermissions(permissionsAssociatedWithRole.stream().map((Permission permission) -> new PermissionDTO(permission)).collect(Collectors.toList())); roleInfo.add(rolePermissionsResponseDTO); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java index 8a6036d6ab..b15e71a5da 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java @@ -1,6 +1,7 @@ package com.objectcomputing.checkins.services.role.role_permissions; import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.PermissionDTO; import io.micronaut.core.annotation.Introspected; import io.micronaut.core.annotation.Nullable; import io.swagger.v3.oas.annotations.media.Schema; @@ -26,7 +27,7 @@ public class RolePermissionsResponseDTO { @NotNull @Schema(description = "List of Permissions associated with this role", required = true) - private List permissions; + private List permissions; public UUID getRoleId() { return roleId; @@ -53,11 +54,11 @@ public void setDescription(@Nullable String description) { this.description = description; } - public List getPermissions() { + public List getPermissions() { return permissions; } - public void setPermissions(List permissions) { + public void setPermissions(List permissions) { this.permissions = permissions; } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/permissions/PermissionsControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/permissions/PermissionsControllerTest.java index d0139bde81..6fe5c434ad 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/permissions/PermissionsControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/permissions/PermissionsControllerTest.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -42,12 +43,12 @@ void testGetAllPermissionsEnsureAlphabeticalOrder() { MemberProfile user = createADefaultMemberProfile(); assignMemberRole(user); - List expected = List.of(Permission.values()); + List expected = List.of(Permission.values()).stream().map((permission) -> new PermissionDTO(permission)).collect(Collectors.toList()); final HttpRequest request = HttpRequest. GET("/OrderByPermission").basicAuth(user.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpResponse> response = - client.toBlocking().exchange(request, Argument.listOf(Permission.class)); + final HttpResponse> response = + client.toBlocking().exchange(request, Argument.listOf(PermissionDTO.class)); assertEquals(HttpStatus.OK, response.getStatus()); assertTrue(response.getBody().isPresent()); @@ -74,12 +75,12 @@ void testGetAllPermissions() { MemberProfile user = createADefaultMemberProfile(); assignMemberRole(user); - List expected = List.of(Permission.values()); + List expected = List.of(Permission.values()).stream().map((permission) -> new PermissionDTO(permission)).collect(Collectors.toList()); final HttpRequest request = HttpRequest. GET("/").basicAuth(user.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpResponse> response = - client.toBlocking().exchange(request, Argument.listOf(Permission.class)); + final HttpResponse> response = + client.toBlocking().exchange(request, Argument.listOf(PermissionDTO.class)); assertEquals(HttpStatus.OK, response.getStatus()); assertTrue(response.getBody().isPresent()); @@ -87,7 +88,7 @@ void testGetAllPermissions() { } @Test - void getAllPermissionsnIsNotAuthenticatedThrowsError() { + void getAllPermissionsIsNotAuthenticatedThrowsError() { final HttpRequest request = HttpRequest.GET("/"); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, diff --git a/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java index ceddc24f0f..53b54094ac 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java @@ -7,6 +7,7 @@ import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.PermissionDTO; import com.objectcomputing.checkins.services.role.Role; import com.objectcomputing.checkins.services.role.RoleType; import io.micronaut.core.type.Argument; @@ -53,7 +54,6 @@ void testGetAllRolePermissions() { final HttpResponse> response = client.toBlocking().exchange(request, Argument.listOf(RolePermissionsResponseDTO.class)); - assertEquals(HttpStatus.OK, response.getStatus()); assertTrue(response.getBody().isPresent()); @@ -62,9 +62,9 @@ void testGetAllRolePermissions() { assertEquals(adminRole.getRole(), actual.get(0).getRole()); assertNotNull(actual.get(0).getDescription()); assertEquals(19, actual.get(0).getPermissions().size()); - List assigned = actual.get(0).getPermissions(); + List assigned = actual.get(0).getPermissions(); for(Permission permission: adminPermissions) { - Permission stored = permission; + PermissionDTO stored = new PermissionDTO(permission); assertTrue(assigned.contains(stored)); } } @@ -87,7 +87,7 @@ void testAssignPermissionToRole() { Role memberRole = getRoleRepository().findByRole(RoleType.MEMBER.name()).orElseThrow(); Permission birthdayPermission = Permission.CAN_VIEW_BIRTHDAY_REPORT; - RolePermissionDTO dto = new RolePermissionDTO(memberRole.getId(), birthdayPermission); + RolePermissionDTO dto = new RolePermissionDTO(memberRole.getId(), new PermissionDTO(birthdayPermission)); final HttpRequest request = HttpRequest.POST("/", dto) .basicAuth(sender.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); @@ -106,7 +106,7 @@ void testRemovePermissionFromRole() { Permission birthdayPermission = Permission.CAN_VIEW_BIRTHDAY_REPORT; setRolePermission(memberRole.getId(), birthdayPermission); - final HttpRequest request = HttpRequest.DELETE("/", new RolePermissionDTO(memberRole.getId(), birthdayPermission)) + final HttpRequest request = HttpRequest.DELETE("/", new RolePermissionDTO(memberRole.getId(), new PermissionDTO(birthdayPermission))) .basicAuth(sender.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); final HttpResponse response = client.toBlocking().exchange(request, Map.class); From e31420bc0d62f85d08848988ec8ef3635cf8b7ba Mon Sep 17 00:00:00 2001 From: Michael Kimberlin Date: Fri, 12 Apr 2024 08:06:00 -0500 Subject: [PATCH 5/5] fix tests --- .../RolePermissionController.java | 14 +++--- .../role_permissions/RolePermissionDTO.java | 10 ++-- .../RolePermissionResponseDTO.java | 49 +++++++++++++++++++ .../RolePermissionsResponseDTO.java | 5 +- .../RolePermissionsControllerTest.java | 4 +- 5 files changed, 65 insertions(+), 17 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionResponseDTO.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java index 129e503dfc..6c53b79c3f 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java @@ -1,8 +1,6 @@ package com.objectcomputing.checkins.services.role.role_permissions; -; import com.objectcomputing.checkins.services.permissions.Permission; -import com.objectcomputing.checkins.services.permissions.PermissionDTO; import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -58,10 +56,10 @@ public Mono>> getAllRolePermission @RequiredPermission(Permission.CAN_ASSIGN_ROLE_PERMISSIONS) @Post("/") - public Mono> save(@Body @Valid RolePermissionDTO rolePermission) { - return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), Permission.fromName(rolePermission.getPermission().getPermission()))) + public Mono> save(@Body @Valid RolePermissionDTO rolePermission) { + return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), Permission.fromName(rolePermission.getPermission()))) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) - .map(savedRolePermission -> (HttpResponse) HttpResponse + .map(savedRolePermission -> (HttpResponse) HttpResponse .created(fromEntity(savedRolePermission))) .subscribeOn(scheduler); } @@ -70,12 +68,12 @@ public Mono> save(@Body @Valid RolePermissionDTO @Delete("/") public Mono> delete(@Body RolePermissionDTO dto) { - return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), Permission.fromName(dto.getPermission().getPermission()))) + return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), Permission.fromName(dto.getPermission()))) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) .subscribeOn(scheduler).thenReturn(HttpResponse.ok()); } - private RolePermissionDTO fromEntity(RolePermission rolePermission) { - return new RolePermissionDTO(rolePermission.getRoleId(), new PermissionDTO(rolePermission.getPermission())); + private RolePermissionResponseDTO fromEntity(RolePermission rolePermission) { + return new RolePermissionResponseDTO(rolePermission.getRoleId(), rolePermission.getPermission()); } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java index 21055e5c97..ac9f997e84 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionDTO.java @@ -16,11 +16,11 @@ public class RolePermissionDTO { private UUID roleId; @Schema(description = "the permission", required = true) - private PermissionDTO permission; + private String permission; - public RolePermissionDTO(UUID roleId, PermissionDTO permission) { + public RolePermissionDTO(UUID roleId, Permission permission) { this.roleId = roleId; - this.permission = permission; + this.permission = permission.name(); } public UUID getRoleId() { @@ -31,11 +31,11 @@ public void setRoleId(UUID roleId) { this.roleId = roleId; } - public PermissionDTO getPermission() { + public String getPermission() { return permission; } - public void setPermission(PermissionDTO permission) { + public void setPermission(String permission) { this.permission = permission; } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionResponseDTO.java new file mode 100644 index 0000000000..384872c162 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionResponseDTO.java @@ -0,0 +1,49 @@ +package com.objectcomputing.checkins.services.role.role_permissions; + +import com.objectcomputing.checkins.services.permissions.Permission; +import io.micronaut.core.annotation.Introspected; +import io.swagger.v3.oas.annotations.media.Schema; + +import javax.validation.constraints.NotNull; +import java.util.UUID; + +@Introspected +public class RolePermissionResponseDTO { + + @NotNull + @Schema(description = "id of the role", required = true) + private UUID roleId; + + @Schema(description = "the permission", required = true) + private Permission permission; + + public RolePermissionResponseDTO(UUID roleId, Permission permission) { + this.roleId = roleId; + this.permission = permission; + } + + public UUID getRoleId() { + return roleId; + } + + public void setRoleId(UUID roleId) { + this.roleId = roleId; + } + + public Permission getPermission() { + return permission; + } + + public void setPermission(Permission permission) { + this.permission = permission; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("RolePermissionCreateDTO{"); + sb.append("roleId=").append(roleId); + sb.append(", permission=").append(permission); + sb.append('}'); + return sb.toString(); + } +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java index b15e71a5da..dde0e95280 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java @@ -17,7 +17,7 @@ public class RolePermissionsResponseDTO { @Schema(description = "id of the role", required = true) private UUID roleId; - @NotNull + @Nullable @Schema(description = "The name of the role", required = true) private String role; @@ -37,11 +37,12 @@ public void setRoleId(UUID roleId) { this.roleId = roleId; } + @Nullable public String getRole() { return role; } - public void setRole(String role) { + public void setRole(@Nullable String role) { this.role = role; } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java index 53b54094ac..f24813bc75 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsControllerTest.java @@ -87,7 +87,7 @@ void testAssignPermissionToRole() { Role memberRole = getRoleRepository().findByRole(RoleType.MEMBER.name()).orElseThrow(); Permission birthdayPermission = Permission.CAN_VIEW_BIRTHDAY_REPORT; - RolePermissionDTO dto = new RolePermissionDTO(memberRole.getId(), new PermissionDTO(birthdayPermission)); + RolePermissionDTO dto = new RolePermissionDTO(memberRole.getId(), birthdayPermission); final HttpRequest request = HttpRequest.POST("/", dto) .basicAuth(sender.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); @@ -106,7 +106,7 @@ void testRemovePermissionFromRole() { Permission birthdayPermission = Permission.CAN_VIEW_BIRTHDAY_REPORT; setRolePermission(memberRole.getId(), birthdayPermission); - final HttpRequest request = HttpRequest.DELETE("/", new RolePermissionDTO(memberRole.getId(), new PermissionDTO(birthdayPermission))) + final HttpRequest request = HttpRequest.DELETE("/", new RolePermissionDTO(memberRole.getId(), birthdayPermission)) .basicAuth(sender.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); final HttpResponse response = client.toBlocking().exchange(request, Map.class);