DeleteSharedVault.spec.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { Uuid, Timestamps, Result } from '@standardnotes/domain-core'
  2. import { SharedVaultRepositoryInterface } from '../../../SharedVault/SharedVaultRepositoryInterface'
  3. import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
  4. import { SharedVaultUserRepositoryInterface } from '../../../SharedVault/User/SharedVaultUserRepositoryInterface'
  5. import { DeleteSharedVault } from './DeleteSharedVault'
  6. import { SharedVault } from '../../../SharedVault/SharedVault'
  7. import { SharedVaultUser } from '../../../SharedVault/User/SharedVaultUser'
  8. import { SharedVaultUserPermission } from '../../../SharedVault/User/SharedVaultUserPermission'
  9. import { RemoveUserFromSharedVault } from '../RemoveUserFromSharedVault/RemoveUserFromSharedVault'
  10. describe('DeleteSharedVault', () => {
  11. let sharedVaultRepository: SharedVaultRepositoryInterface
  12. let sharedVaultUserRepository: SharedVaultUserRepositoryInterface
  13. let sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface
  14. let removeUserFromSharedVault: RemoveUserFromSharedVault
  15. let sharedVault: SharedVault
  16. let sharedVaultUser: SharedVaultUser
  17. const createUseCase = () =>
  18. new DeleteSharedVault(
  19. sharedVaultRepository,
  20. sharedVaultUserRepository,
  21. sharedVaultInviteRepository,
  22. removeUserFromSharedVault,
  23. )
  24. beforeEach(() => {
  25. sharedVault = SharedVault.create({
  26. fileUploadBytesLimit: 100,
  27. fileUploadBytesUsed: 2,
  28. userUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
  29. timestamps: Timestamps.create(123, 123).getValue(),
  30. sharedVaultItems: [],
  31. }).getValue()
  32. sharedVaultRepository = {} as jest.Mocked<SharedVaultRepositoryInterface>
  33. sharedVaultRepository.findByUuid = jest.fn().mockResolvedValue(sharedVault)
  34. sharedVaultRepository.remove = jest.fn()
  35. sharedVaultUser = SharedVaultUser.create({
  36. permission: SharedVaultUserPermission.create(SharedVaultUserPermission.PERMISSIONS.Read).getValue(),
  37. sharedVaultUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
  38. userUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
  39. timestamps: Timestamps.create(123, 123).getValue(),
  40. }).getValue()
  41. sharedVaultUserRepository = {} as jest.Mocked<SharedVaultUserRepositoryInterface>
  42. sharedVaultUserRepository.findBySharedVaultUuid = jest.fn().mockResolvedValue([sharedVaultUser])
  43. sharedVaultInviteRepository = {} as jest.Mocked<SharedVaultInviteRepositoryInterface>
  44. sharedVaultInviteRepository.removeBySharedVaultUuid = jest.fn()
  45. removeUserFromSharedVault = {} as jest.Mocked<RemoveUserFromSharedVault>
  46. removeUserFromSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
  47. })
  48. it('should remove shared vault', async () => {
  49. const useCase = createUseCase()
  50. const result = await useCase.execute({
  51. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  52. originatorUuid: '00000000-0000-0000-0000-000000000000',
  53. })
  54. expect(result.isFailed()).toBeFalsy()
  55. expect(sharedVaultRepository.remove).toHaveBeenCalled()
  56. expect(sharedVaultInviteRepository.removeBySharedVaultUuid).toHaveBeenCalled()
  57. expect(removeUserFromSharedVault.execute).toHaveBeenCalled()
  58. })
  59. it('should return error when shared vault does not exist', async () => {
  60. sharedVaultRepository.findByUuid = jest.fn().mockResolvedValue(null)
  61. const useCase = createUseCase()
  62. const result = await useCase.execute({
  63. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  64. originatorUuid: '00000000-0000-0000-0000-000000000000',
  65. })
  66. expect(result.isFailed()).toBeTruthy()
  67. expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
  68. expect(sharedVaultInviteRepository.removeBySharedVaultUuid).not.toHaveBeenCalled()
  69. expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
  70. })
  71. it('should return error when shared vault uuid is invalid', async () => {
  72. const useCase = createUseCase()
  73. const result = await useCase.execute({
  74. sharedVaultUuid: 'invalid',
  75. originatorUuid: '00000000-0000-0000-0000-000000000000',
  76. })
  77. expect(result.isFailed()).toBeTruthy()
  78. expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
  79. expect(sharedVaultInviteRepository.removeBySharedVaultUuid).not.toHaveBeenCalled()
  80. expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
  81. })
  82. it('should return error when originator uuid is invalid', async () => {
  83. const useCase = createUseCase()
  84. const result = await useCase.execute({
  85. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  86. originatorUuid: 'invalid',
  87. })
  88. expect(result.isFailed()).toBeTruthy()
  89. expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
  90. expect(sharedVaultInviteRepository.removeBySharedVaultUuid).not.toHaveBeenCalled()
  91. expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
  92. })
  93. it('should return error when originator of the delete request is not the owner of the shared vault', async () => {
  94. sharedVault = SharedVault.create({
  95. fileUploadBytesLimit: 100,
  96. fileUploadBytesUsed: 2,
  97. userUuid: Uuid.create('00000000-0000-0000-0000-000000000001').getValue(),
  98. timestamps: Timestamps.create(123, 123).getValue(),
  99. sharedVaultItems: [],
  100. }).getValue()
  101. sharedVaultRepository.findByUuid = jest.fn().mockResolvedValue(sharedVault)
  102. const useCase = createUseCase()
  103. const result = await useCase.execute({
  104. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  105. originatorUuid: '00000000-0000-0000-0000-000000000000',
  106. })
  107. expect(result.isFailed()).toBeTruthy()
  108. expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
  109. expect(sharedVaultInviteRepository.removeBySharedVaultUuid).not.toHaveBeenCalled()
  110. expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
  111. })
  112. it('should return error if removing user from shared vault fails', async () => {
  113. removeUserFromSharedVault.execute = jest.fn().mockReturnValue(Result.fail('failed'))
  114. const useCase = createUseCase()
  115. const result = await useCase.execute({
  116. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  117. originatorUuid: '00000000-0000-0000-0000-000000000000',
  118. })
  119. expect(result.isFailed()).toBeTruthy()
  120. expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
  121. expect(sharedVaultInviteRepository.removeBySharedVaultUuid).not.toHaveBeenCalled()
  122. expect(removeUserFromSharedVault.execute).toHaveBeenCalled()
  123. })
  124. })