AddNotificationsForUsers.spec.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import {
  2. SharedVaultUserPermission,
  3. Uuid,
  4. Timestamps,
  5. Result,
  6. NotificationPayload,
  7. NotificationType,
  8. } from '@standardnotes/domain-core'
  9. import { SharedVaultUser } from '../../../SharedVault/User/SharedVaultUser'
  10. import { SharedVaultUserRepositoryInterface } from '../../../SharedVault/User/SharedVaultUserRepositoryInterface'
  11. import { AddNotificationForUser } from '../AddNotificationForUser/AddNotificationForUser'
  12. import { AddNotificationsForUsers } from './AddNotificationsForUsers'
  13. describe('AddNotificationsForUsers', () => {
  14. let sharedVaultUserRepository: SharedVaultUserRepositoryInterface
  15. let addNotificationForUser: AddNotificationForUser
  16. let sharedVaultUser: SharedVaultUser
  17. let payload: NotificationPayload
  18. const createUseCase = () => new AddNotificationsForUsers(sharedVaultUserRepository, addNotificationForUser)
  19. beforeEach(() => {
  20. sharedVaultUser = SharedVaultUser.create({
  21. permission: SharedVaultUserPermission.create(SharedVaultUserPermission.PERMISSIONS.Read).getValue(),
  22. sharedVaultUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
  23. userUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
  24. timestamps: Timestamps.create(123, 123).getValue(),
  25. }).getValue()
  26. sharedVaultUserRepository = {} as jest.Mocked<SharedVaultUserRepositoryInterface>
  27. sharedVaultUserRepository.findBySharedVaultUuid = jest.fn().mockResolvedValue([sharedVaultUser])
  28. addNotificationForUser = {} as jest.Mocked<AddNotificationForUser>
  29. addNotificationForUser.execute = jest.fn().mockResolvedValue(Result.ok())
  30. payload = NotificationPayload.create({
  31. sharedVaultUuid: Uuid.create('0e8c3c7e-3f1a-4f7a-9b5a-5b2b0a7d4b1e').getValue(),
  32. type: NotificationType.create(NotificationType.TYPES.SharedVaultFileUploaded).getValue(),
  33. version: '1.0',
  34. }).getValue()
  35. })
  36. it('should add notifications for all users in a shared vault', async () => {
  37. const useCase = createUseCase()
  38. const result = await useCase.execute({
  39. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  40. type: 'test',
  41. payload,
  42. version: '1.0',
  43. })
  44. expect(result.isFailed()).toBeFalsy()
  45. expect(addNotificationForUser.execute).toHaveBeenCalledTimes(1)
  46. })
  47. it('should return error if shared vault uuid is invalid', async () => {
  48. const useCase = createUseCase()
  49. const result = await useCase.execute({
  50. sharedVaultUuid: 'invalid',
  51. type: 'test',
  52. payload,
  53. version: '1.0',
  54. })
  55. expect(result.isFailed()).toBeTruthy()
  56. })
  57. it('should return error if adding notification fails', async () => {
  58. const useCase = createUseCase()
  59. addNotificationForUser.execute = jest.fn().mockResolvedValue(Result.fail('test'))
  60. const result = await useCase.execute({
  61. sharedVaultUuid: '00000000-0000-0000-0000-000000000000',
  62. type: 'test',
  63. payload,
  64. version: '1.0',
  65. })
  66. expect(result.isFailed()).toBeTruthy()
  67. })
  68. })