瀏覽代碼

fix(syncing-server): force remove shared vault owner when removing shared vault

Karol Sójko 1 年之前
父節點
當前提交
f77e29d3c9

+ 1 - 0
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts

@@ -42,6 +42,7 @@ export class DeleteSharedVault implements UseCaseInterface<void> {
         originatorUuid: originatorUuid.value,
         sharedVaultUuid: sharedVaultUuid.value,
         userUuid: sharedVaultUser.props.userUuid.value,
+        forceRemoveOwner: true,
       })
 
       if (result.isFailed()) {

+ 20 - 0
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({

+ 1 - 1
packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts

@@ -42,7 +42,7 @@ export class RemoveUserFromSharedVault implements UseCaseInterface<void> {
     }
 
     const removingOwner = sharedVault.props.userUuid.equals(userUuid)
-    if (removingOwner) {
+    if (removingOwner && !dto.forceRemoveOwner) {
       return Result.fail('Owner cannot be removed from shared vault')
     }
 

+ 1 - 0
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
 }