From f77e29d3c9c9a28be3c5624d2c9bf0ffd6348377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Mon, 24 Jul 2023 10:59:03 +0200 Subject: [PATCH] fix(syncing-server): force remove shared vault owner when removing shared vault --- .../DeleteSharedVault/DeleteSharedVault.ts | 1 + .../RemoveUserFromSharedVault.spec.ts | 20 +++++++++++++++++++ .../RemoveUserFromSharedVault.ts | 2 +- .../RemoveUserFromSharedVaultDTO.ts | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts b/packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts index 3865baf77..0987e957f 100644 --- a/packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts +++ b/packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts @@ -42,6 +42,7 @@ export class DeleteSharedVault implements UseCaseInterface { originatorUuid: originatorUuid.value, sharedVaultUuid: sharedVaultUuid.value, userUuid: sharedVaultUser.props.userUuid.value, + forceRemoveOwner: true, }) if (result.isFailed()) { diff --git a/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.spec.ts b/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.spec.ts index d4d5ab0e9..5320d568d 100644 --- a/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.spec.ts +++ b/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.spec.ts @@ -102,6 +102,26 @@ describe('RemoveUserFromSharedVault', () => { expect(result.getError()).toBe('Only owner can remove users from shared vault') }) + it('should remove shared vault user if user is owner and is being force removed', async () => { + sharedVault = SharedVault.create({ + fileUploadBytesLimit: 100, + fileUploadBytesUsed: 2, + userUuid: Uuid.create('00000000-0000-0000-0000-000000000002').getValue(), + timestamps: Timestamps.create(123, 123).getValue(), + }).getValue() + sharedVaultRepository.findByUuid = jest.fn().mockResolvedValue(sharedVault) + + const useCase = createUseCase() + await useCase.execute({ + originatorUuid: '00000000-0000-0000-0000-000000000002', + sharedVaultUuid: '00000000-0000-0000-0000-000000000000', + userUuid: '00000000-0000-0000-0000-000000000001', + forceRemoveOwner: true, + }) + + expect(sharedVaultUserRepository.remove).toHaveBeenCalledWith(sharedVaultUser) + }) + it('should return error when user is owner of shared vault', async () => { const useCase = createUseCase() const result = await useCase.execute({ diff --git a/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts b/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts index c0f22cd5a..d21fb46fc 100644 --- a/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts +++ b/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts @@ -42,7 +42,7 @@ export class RemoveUserFromSharedVault implements UseCaseInterface { } const removingOwner = sharedVault.props.userUuid.equals(userUuid) - if (removingOwner) { + if (removingOwner && !dto.forceRemoveOwner) { return Result.fail('Owner cannot be removed from shared vault') } diff --git a/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVaultDTO.ts b/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVaultDTO.ts index 0ff2b9cea..ab84423d3 100644 --- a/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVaultDTO.ts +++ b/packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVaultDTO.ts @@ -2,4 +2,5 @@ export interface RemoveUserFromSharedVaultDTO { sharedVaultUuid: string originatorUuid: string userUuid: string + forceRemoveOwner?: boolean }