DeleteSharedVault.spec.ts 6.2 KB

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