From 18606e2cde0e4172ebd1328e31934c1bc06ce212 Mon Sep 17 00:00:00 2001 From: open-schnick Date: Thu, 29 Oct 2020 14:53:49 +0100 Subject: [PATCH 1/2] reworked PermissionController and dtos --- .../permission/data/dto/PermissionSet.java | 17 +++++++++--- .../data/dto/request/PermissionRecipient.java | 16 +++++++++++ .../dto/request/PermissionRecipientType.java | 5 ++++ .../data/dto/request/PermissionRequest.java | 9 +++++++ .../data/dto/request/PermissionType.java | 5 ++++ .../rest/PermissionRestController.java | 27 +++++++++++-------- .../rest/PermissionRestService.java | 6 +++-- .../rest/PermissionRestServiceInterface.java | 6 +++-- 8 files changed, 72 insertions(+), 19 deletions(-) create mode 100644 src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipient.java create mode 100644 src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipientType.java create mode 100644 src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRequest.java create mode 100644 src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionType.java diff --git a/src/main/java/de/filefighter/rest/domain/permission/data/dto/PermissionSet.java b/src/main/java/de/filefighter/rest/domain/permission/data/dto/PermissionSet.java index 40fcff92..93bf9e4e 100644 --- a/src/main/java/de/filefighter/rest/domain/permission/data/dto/PermissionSet.java +++ b/src/main/java/de/filefighter/rest/domain/permission/data/dto/PermissionSet.java @@ -2,10 +2,19 @@ import de.filefighter.rest.domain.user.data.dto.User; import de.filefighter.rest.domain.user.role.Role; +import lombok.Getter; +@Getter public class PermissionSet { - private Role[] visibleForRoles; - private Role[] editableForRoles; - private User[] visibleForUsers; - private User[] editableForUsers; + private final Role[] visibleForRoles; + private final Role[] editableForRoles; + private final User[] visibleForUsers; + private final User[] editableForUsers; + + public PermissionSet(Role[] visibleForRoles, Role[] editableForRoles, User[] visibleForUsers, User[] editableForUsers) { + this.visibleForRoles = visibleForRoles; + this.editableForRoles = editableForRoles; + this.visibleForUsers = visibleForUsers; + this.editableForUsers = editableForUsers; + } } diff --git a/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipient.java b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipient.java new file mode 100644 index 00000000..a0ed4055 --- /dev/null +++ b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipient.java @@ -0,0 +1,16 @@ +package de.filefighter.rest.domain.permission.data.dto.request; + +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public class PermissionRecipient{ + private final PermissionRecipientType permissionRecipientType; + private final long userOrGroupId; + + private PermissionRecipient(PermissionRecipientType permissionRecipientType, long userOrGroupId) { + this.permissionRecipientType = permissionRecipientType; + this.userOrGroupId = userOrGroupId; + } +} \ No newline at end of file diff --git a/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipientType.java b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipientType.java new file mode 100644 index 00000000..028e9761 --- /dev/null +++ b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRecipientType.java @@ -0,0 +1,5 @@ +package de.filefighter.rest.domain.permission.data.dto.request; + +public enum PermissionRecipientType { + GROUP, USER +} diff --git a/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRequest.java b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRequest.java new file mode 100644 index 00000000..f6b5844c --- /dev/null +++ b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionRequest.java @@ -0,0 +1,9 @@ +package de.filefighter.rest.domain.permission.data.dto.request; + +import lombok.Data; + +@Data +public class PermissionRequest { + PermissionType permission; + PermissionRecipient[] permissionRecipients; +} diff --git a/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionType.java b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionType.java new file mode 100644 index 00000000..1aeaba4e --- /dev/null +++ b/src/main/java/de/filefighter/rest/domain/permission/data/dto/request/PermissionType.java @@ -0,0 +1,5 @@ +package de.filefighter.rest.domain.permission.data.dto.request; + +public enum PermissionType { + READ_ACCESS, WRITE_ACCESS +} diff --git a/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestController.java b/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestController.java index cbbed12d..ff65a18b 100644 --- a/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestController.java +++ b/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestController.java @@ -1,6 +1,8 @@ package de.filefighter.rest.domain.permission.rest; +import de.filefighter.rest.domain.permission.data.dto.request.PermissionRequest; import de.filefighter.rest.domain.permission.data.dto.PermissionSet; +import de.filefighter.rest.rest.ServerResponse; import io.swagger.annotations.Api; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,8 +23,9 @@ public PermissionRestController(PermissionRestServiceInterface permissionsRestSe this.permissionsRestService = permissionsRestService; } + //R @GetMapping(FS_BASE_URI+"{fsItemId}/permission") - public EntityModel getPermissionsOfFileOrFolder( + public EntityModel getPermissionSetForFileOrFolder( @PathVariable long fsItemId, @RequestHeader(value = "Authorization", defaultValue = AUTHORIZATION_BEARER_PREFIX + "token") String accessToken ){ @@ -31,25 +34,27 @@ public EntityModel getPermissionsOfFileOrFolder( return permissionsRestService.getPermissionSetByIdAndToken(fsItemId, accessToken); } - @PostMapping(FS_BASE_URI+"{fsItemId}/permission") - public EntityModel setPermissionSetForId( + //C U + @PutMapping(FS_BASE_URI+"{fsItemId}/permission") + public EntityModel addUsersOrGroupsToPermissionSetForFileOrFolder( @PathVariable long fsItemId, - @RequestBody PermissionSet newPermissionSet, + @RequestBody PermissionRequest permissionRequest, @RequestHeader(value = "Authorization", defaultValue = AUTHORIZATION_BEARER_PREFIX + "token") String accessToken ){ - LOG.info("Requested PermissionSet for FileSystemItem {}", fsItemId); - return permissionsRestService.setPermissionSetByIdAndToken(newPermissionSet, fsItemId, accessToken); + LOG.info("Requested new User or Group permissions {} for Id {}.",permissionRequest, fsItemId); + return permissionsRestService.addUsersOrGroupsToPermissionSetForFileOrFolderWithAccessToken(permissionRequest,fsItemId, accessToken); } - @PutMapping(FS_BASE_URI+"{fsItemId}/permission") - public EntityModel updatePermissionSetForId( + //D + @DeleteMapping(FS_BASE_URI+"{fsItemId}/permission") + public EntityModel removeUsersOrGroupsFromPermissionSetForFileOrFolder( @PathVariable long fsItemId, - @RequestBody PermissionSet updatedPermissionSet, + @RequestBody PermissionRequest permissionRequest, @RequestHeader(value = "Authorization", defaultValue = AUTHORIZATION_BEARER_PREFIX + "token") String accessToken ){ - LOG.info("Requested PermissionSet for FileSystemItem {}", fsItemId); - return permissionsRestService.updatePermissionSetByIdAndToken(updatedPermissionSet,fsItemId, accessToken); + LOG.info("Requested removal of User or Group permissions {} for Id {}.",permissionRequest, fsItemId); + return permissionsRestService.removeUsersOrGroupsFromPermissionSetForFileOrFolderWithAccessToken(permissionRequest,fsItemId, accessToken); } } diff --git a/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestService.java b/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestService.java index fe87a9d8..5c4ea082 100644 --- a/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestService.java +++ b/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestService.java @@ -1,6 +1,8 @@ package de.filefighter.rest.domain.permission.rest; import de.filefighter.rest.domain.permission.data.dto.PermissionSet; +import de.filefighter.rest.domain.permission.data.dto.request.PermissionRequest; +import de.filefighter.rest.rest.ServerResponse; import org.springframework.hateoas.EntityModel; import org.springframework.stereotype.Service; @@ -12,12 +14,12 @@ public EntityModel getPermissionSetByIdAndToken(long fsItemId, St } @Override - public EntityModel setPermissionSetByIdAndToken(PermissionSet newPermissionSet, long fsItemId, String accessToken) { + public EntityModel addUsersOrGroupsToPermissionSetForFileOrFolderWithAccessToken(PermissionRequest permissionRequest, long fsItemId, String accessToken) { return null; } @Override - public EntityModel updatePermissionSetByIdAndToken(PermissionSet updatedPermissionSet, long fsItemId, String accessToken) { + public EntityModel removeUsersOrGroupsFromPermissionSetForFileOrFolderWithAccessToken(PermissionRequest permissionRequest, long fsItemId, String accessToken) { return null; } } diff --git a/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestServiceInterface.java b/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestServiceInterface.java index 2b88960f..8bad40c3 100644 --- a/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestServiceInterface.java +++ b/src/main/java/de/filefighter/rest/domain/permission/rest/PermissionRestServiceInterface.java @@ -1,10 +1,12 @@ package de.filefighter.rest.domain.permission.rest; import de.filefighter.rest.domain.permission.data.dto.PermissionSet; +import de.filefighter.rest.domain.permission.data.dto.request.PermissionRequest; +import de.filefighter.rest.rest.ServerResponse; import org.springframework.hateoas.EntityModel; public interface PermissionRestServiceInterface { EntityModel getPermissionSetByIdAndToken(long fsItemId, String accessToken); - EntityModel setPermissionSetByIdAndToken(PermissionSet newPermissionSet, long fsItemId, String accessToken); - EntityModel updatePermissionSetByIdAndToken(PermissionSet updatedPermissionSet, long fsItemId, String accessToken); + EntityModel addUsersOrGroupsToPermissionSetForFileOrFolderWithAccessToken(PermissionRequest permissionRequest, long fsItemId, String accessToken); + EntityModel removeUsersOrGroupsFromPermissionSetForFileOrFolderWithAccessToken(PermissionRequest permissionRequest, long fsItemId, String accessToken); } From b64f6dcc69eed05fe3dd5037bbe7b17a2e0a5946 Mon Sep 17 00:00:00 2001 From: open-schnick Date: Thu, 29 Oct 2020 14:53:58 +0100 Subject: [PATCH 2/2] added unit test --- .../PermissionRestControllerUnitTest.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/test/java/de/filefighter/rest/domain/permission/rest/PermissionRestControllerUnitTest.java diff --git a/src/test/java/de/filefighter/rest/domain/permission/rest/PermissionRestControllerUnitTest.java b/src/test/java/de/filefighter/rest/domain/permission/rest/PermissionRestControllerUnitTest.java new file mode 100644 index 00000000..b57ab242 --- /dev/null +++ b/src/test/java/de/filefighter/rest/domain/permission/rest/PermissionRestControllerUnitTest.java @@ -0,0 +1,75 @@ +package de.filefighter.rest.domain.permission.rest; + +import de.filefighter.rest.domain.permission.data.dto.PermissionSet; +import de.filefighter.rest.domain.permission.data.dto.request.PermissionRequest; +import de.filefighter.rest.domain.user.data.dto.User; +import de.filefighter.rest.rest.ServerResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.hateoas.EntityModel; + +import java.security.Permission; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class PermissionRestControllerUnitTest { + + private final PermissionRestServiceInterface permissionRestService = mock(PermissionRestService.class); + private PermissionRestController permissionRestController; + + @BeforeEach + void setUp() { + permissionRestController = new PermissionRestController(permissionRestService); + } + + @Test + void getPermissionSetForFileOrFolder() { + String token = "token"; + long id = 420; + User dummyUser = User.builder().create(); + EntityModel expected = EntityModel.of(new PermissionSet(null, null, new User[]{dummyUser}, null)); + + when(permissionRestService.getPermissionSetByIdAndToken(id, token)).thenReturn(expected); + + EntityModel actual = permissionRestController.getPermissionSetForFileOrFolder(420, token); + + assertEquals(expected, actual); + } + + @Test + void addUsersOrGroupsToPermissionSetForFileOrFolder() { + String token = "token"; + long id = 420; + ServerResponse dummyResponse = new ServerResponse("ok", "baum"); + PermissionRequest dummyRequest = new PermissionRequest(); + + EntityModel expected = EntityModel.of(dummyResponse); + + + when(permissionRestService.addUsersOrGroupsToPermissionSetForFileOrFolderWithAccessToken(dummyRequest, id, token)).thenReturn(expected); + + EntityModel actual = permissionRestController.addUsersOrGroupsToPermissionSetForFileOrFolder(420, dummyRequest, token); + + assertEquals(expected, actual); + } + + @Test + void removeUsersOrGroupsFromPermissionSetForFileOrFolder() { + String token = "token"; + long id = 420; + ServerResponse dummyResponse = new ServerResponse("ok", "baum"); + PermissionRequest dummyRequest = new PermissionRequest(); + + EntityModel expected = EntityModel.of(dummyResponse); + + + when(permissionRestService.removeUsersOrGroupsFromPermissionSetForFileOrFolderWithAccessToken(dummyRequest, id, token)).thenReturn(expected); + + EntityModel actual = permissionRestController.removeUsersOrGroupsFromPermissionSetForFileOrFolder(420, dummyRequest, token); + + assertEquals(expected, actual); + } +} \ No newline at end of file