FileRemovedEventHandler.spec.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import 'reflect-metadata'
  2. import { FileRemovedEvent } from '@standardnotes/domain-events'
  3. import { Logger } from 'winston'
  4. import { User } from '../User/User'
  5. import { FileRemovedEventHandler } from './FileRemovedEventHandler'
  6. import { SubscriptionSettingServiceInterface } from '../Setting/SubscriptionSettingServiceInterface'
  7. import { UserSubscription } from '../Subscription/UserSubscription'
  8. import { UserSubscriptionType } from '../Subscription/UserSubscriptionType'
  9. import { UserSubscriptionServiceInterface } from '../Subscription/UserSubscriptionServiceInterface'
  10. describe('FileRemovedEventHandler', () => {
  11. let userSubscriptionService: UserSubscriptionServiceInterface
  12. let logger: Logger
  13. let regularUser: User
  14. let sharedUser: User
  15. let event: FileRemovedEvent
  16. let subscriptionSettingService: SubscriptionSettingServiceInterface
  17. let regularSubscription: UserSubscription
  18. let sharedSubscription: UserSubscription
  19. const createHandler = () => new FileRemovedEventHandler(userSubscriptionService, subscriptionSettingService, logger)
  20. beforeEach(() => {
  21. regularUser = {
  22. uuid: '123',
  23. } as jest.Mocked<User>
  24. sharedUser = {
  25. uuid: '234',
  26. } as jest.Mocked<User>
  27. regularSubscription = {
  28. uuid: '1-2-3',
  29. subscriptionType: UserSubscriptionType.Regular,
  30. user: Promise.resolve(regularUser),
  31. } as jest.Mocked<UserSubscription>
  32. sharedSubscription = {
  33. uuid: '2-3-4',
  34. subscriptionType: UserSubscriptionType.Shared,
  35. user: Promise.resolve(sharedUser),
  36. } as jest.Mocked<UserSubscription>
  37. userSubscriptionService = {} as jest.Mocked<UserSubscriptionServiceInterface>
  38. userSubscriptionService.findRegularSubscriptionForUserUuid = jest
  39. .fn()
  40. .mockReturnValue({ regularSubscription, sharedSubscription: null })
  41. subscriptionSettingService = {} as jest.Mocked<SubscriptionSettingServiceInterface>
  42. subscriptionSettingService.findSubscriptionSettingWithDecryptedValue = jest.fn().mockReturnValue(null)
  43. subscriptionSettingService.createOrReplace = jest.fn()
  44. event = {} as jest.Mocked<FileRemovedEvent>
  45. event.createdAt = new Date(1)
  46. event.payload = {
  47. userUuid: '1-2-3',
  48. fileByteSize: 123,
  49. filePath: '1-2-3/2-3-4',
  50. fileName: '2-3-4',
  51. regularSubscriptionUuid: '4-5-6',
  52. }
  53. logger = {} as jest.Mocked<Logger>
  54. logger.warn = jest.fn()
  55. })
  56. it('should do nothing a bytes used setting does not exist', async () => {
  57. await createHandler().handle(event)
  58. expect(subscriptionSettingService.createOrReplace).not.toHaveBeenCalled()
  59. })
  60. it('should not do anything if a user subscription is not found', async () => {
  61. subscriptionSettingService.findSubscriptionSettingWithDecryptedValue = jest.fn().mockReturnValue({
  62. value: 345,
  63. })
  64. userSubscriptionService.findRegularSubscriptionForUserUuid = jest
  65. .fn()
  66. .mockReturnValue({ regularSubscription: null, sharedSubscription: null })
  67. await createHandler().handle(event)
  68. expect(subscriptionSettingService.createOrReplace).not.toHaveBeenCalled()
  69. })
  70. it('should update a bytes used setting', async () => {
  71. subscriptionSettingService.findSubscriptionSettingWithDecryptedValue = jest.fn().mockReturnValue({
  72. value: 345,
  73. })
  74. await createHandler().handle(event)
  75. expect(subscriptionSettingService.createOrReplace).toHaveBeenCalledWith({
  76. props: {
  77. name: 'FILE_UPLOAD_BYTES_USED',
  78. sensitive: false,
  79. unencryptedValue: '222',
  80. serverEncryptionVersion: 0,
  81. },
  82. user: regularUser,
  83. userSubscription: {
  84. uuid: '1-2-3',
  85. subscriptionType: 'regular',
  86. user: Promise.resolve(regularUser),
  87. },
  88. })
  89. })
  90. it('should update a bytes used setting on both shared and regular subscription', async () => {
  91. userSubscriptionService.findRegularSubscriptionForUserUuid = jest
  92. .fn()
  93. .mockReturnValue({ regularSubscription, sharedSubscription })
  94. subscriptionSettingService.findSubscriptionSettingWithDecryptedValue = jest.fn().mockReturnValue({
  95. value: 345,
  96. })
  97. await createHandler().handle(event)
  98. expect(subscriptionSettingService.createOrReplace).toHaveBeenNthCalledWith(1, {
  99. props: {
  100. name: 'FILE_UPLOAD_BYTES_USED',
  101. sensitive: false,
  102. unencryptedValue: '222',
  103. serverEncryptionVersion: 0,
  104. },
  105. user: regularUser,
  106. userSubscription: {
  107. uuid: '1-2-3',
  108. subscriptionType: 'regular',
  109. user: Promise.resolve(regularUser),
  110. },
  111. })
  112. expect(subscriptionSettingService.createOrReplace).toHaveBeenNthCalledWith(2, {
  113. props: {
  114. name: 'FILE_UPLOAD_BYTES_USED',
  115. sensitive: false,
  116. unencryptedValue: '222',
  117. serverEncryptionVersion: 0,
  118. },
  119. user: sharedUser,
  120. userSubscription: {
  121. uuid: '2-3-4',
  122. subscriptionType: 'shared',
  123. user: Promise.resolve(sharedUser),
  124. },
  125. })
  126. })
  127. })