SettingInterpreter.spec.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import {
  2. DomainEventPublisherInterface,
  3. EmailBackupRequestedEvent,
  4. MuteEmailsSettingChangedEvent,
  5. UserDisabledSessionUserAgentLoggingEvent,
  6. } from '@standardnotes/domain-events'
  7. import {
  8. EmailBackupFrequency,
  9. LogSessionUserAgentOption,
  10. MuteMarketingEmailsOption,
  11. SettingName,
  12. } from '@standardnotes/settings'
  13. import 'reflect-metadata'
  14. import { Logger } from 'winston'
  15. import { DomainEventFactoryInterface } from '../Event/DomainEventFactoryInterface'
  16. import { User } from '../User/User'
  17. import { Setting } from './Setting'
  18. import { SettingDecrypterInterface } from './SettingDecrypterInterface'
  19. import { SettingInterpreter } from './SettingInterpreter'
  20. import { SettingRepositoryInterface } from './SettingRepositoryInterface'
  21. import { GetUserKeyParams } from '../UseCase/GetUserKeyParams/GetUserKeyParams'
  22. import { KeyParamsData } from '@standardnotes/responses'
  23. describe('SettingInterpreter', () => {
  24. let user: User
  25. let domainEventPublisher: DomainEventPublisherInterface
  26. let domainEventFactory: DomainEventFactoryInterface
  27. let settingRepository: SettingRepositoryInterface
  28. let settingDecrypter: SettingDecrypterInterface
  29. let logger: Logger
  30. let getUserKeyParams: GetUserKeyParams
  31. const createInterpreter = () =>
  32. new SettingInterpreter(domainEventPublisher, domainEventFactory, settingRepository, getUserKeyParams)
  33. beforeEach(() => {
  34. user = {
  35. uuid: '4-5-6',
  36. email: 'test@test.te',
  37. } as jest.Mocked<User>
  38. settingRepository = {} as jest.Mocked<SettingRepositoryInterface>
  39. settingRepository.findLastByNameAndUserUuid = jest.fn().mockReturnValue(null)
  40. settingRepository.findOneByNameAndUserUuid = jest.fn().mockReturnValue(null)
  41. settingDecrypter = {} as jest.Mocked<SettingDecrypterInterface>
  42. settingDecrypter.decryptSettingValue = jest.fn().mockReturnValue('decrypted')
  43. domainEventPublisher = {} as jest.Mocked<DomainEventPublisherInterface>
  44. domainEventPublisher.publish = jest.fn()
  45. domainEventFactory = {} as jest.Mocked<DomainEventFactoryInterface>
  46. domainEventFactory.createEmailBackupRequestedEvent = jest
  47. .fn()
  48. .mockReturnValue({} as jest.Mocked<EmailBackupRequestedEvent>)
  49. domainEventFactory.createUserDisabledSessionUserAgentLoggingEvent = jest
  50. .fn()
  51. .mockReturnValue({} as jest.Mocked<UserDisabledSessionUserAgentLoggingEvent>)
  52. domainEventFactory.createMuteEmailsSettingChangedEvent = jest
  53. .fn()
  54. .mockReturnValue({} as jest.Mocked<MuteEmailsSettingChangedEvent>)
  55. logger = {} as jest.Mocked<Logger>
  56. logger.debug = jest.fn()
  57. logger.warn = jest.fn()
  58. logger.error = jest.fn()
  59. getUserKeyParams = {} as jest.Mocked<GetUserKeyParams>
  60. getUserKeyParams.execute = jest.fn().mockReturnValue({ keyParams: {} as jest.Mocked<KeyParamsData> })
  61. })
  62. it('should trigger session cleanup if user is disabling session user agent logging', async () => {
  63. await createInterpreter().interpretSettingUpdated(
  64. SettingName.NAMES.LogSessionUserAgent,
  65. user,
  66. LogSessionUserAgentOption.Disabled,
  67. )
  68. expect(domainEventPublisher.publish).toHaveBeenCalled()
  69. expect(domainEventFactory.createUserDisabledSessionUserAgentLoggingEvent).toHaveBeenCalledWith({
  70. userUuid: '4-5-6',
  71. email: 'test@test.te',
  72. })
  73. })
  74. it('should trigger backup if email backup setting is created - emails not muted', async () => {
  75. await createInterpreter().interpretSettingUpdated(
  76. SettingName.NAMES.EmailBackupFrequency,
  77. user,
  78. EmailBackupFrequency.Daily,
  79. )
  80. expect(domainEventPublisher.publish).toHaveBeenCalled()
  81. expect(domainEventFactory.createEmailBackupRequestedEvent).toHaveBeenCalledWith('4-5-6', '', false, {})
  82. })
  83. it('should trigger backup if email backup setting is created - emails muted', async () => {
  84. settingRepository.findOneByNameAndUserUuid = jest.fn().mockReturnValue({
  85. name: SettingName.NAMES.MuteFailedBackupsEmails,
  86. uuid: '6-7-8',
  87. value: 'muted',
  88. } as jest.Mocked<Setting>)
  89. await createInterpreter().interpretSettingUpdated(
  90. SettingName.NAMES.EmailBackupFrequency,
  91. user,
  92. EmailBackupFrequency.Daily,
  93. )
  94. expect(domainEventPublisher.publish).toHaveBeenCalled()
  95. expect(domainEventFactory.createEmailBackupRequestedEvent).toHaveBeenCalledWith('4-5-6', '6-7-8', true, {})
  96. })
  97. it('should not trigger backup if email backup setting is disabled', async () => {
  98. settingRepository.findOneByNameAndUserUuid = jest.fn().mockReturnValue(null)
  99. await createInterpreter().interpretSettingUpdated(
  100. SettingName.NAMES.EmailBackupFrequency,
  101. user,
  102. EmailBackupFrequency.Disabled,
  103. )
  104. expect(domainEventPublisher.publish).not.toHaveBeenCalled()
  105. expect(domainEventFactory.createEmailBackupRequestedEvent).not.toHaveBeenCalled()
  106. })
  107. it('should trigger mute subscription emails rejection if mute setting changed', async () => {
  108. settingRepository.findOneByNameAndUserUuid = jest.fn().mockReturnValue(null)
  109. await createInterpreter().interpretSettingUpdated(
  110. SettingName.NAMES.MuteMarketingEmails,
  111. user,
  112. MuteMarketingEmailsOption.Muted,
  113. )
  114. expect(domainEventPublisher.publish).toHaveBeenCalled()
  115. expect(domainEventFactory.createMuteEmailsSettingChangedEvent).toHaveBeenCalledWith({
  116. emailSubscriptionRejectionLevel: 'MARKETING',
  117. mute: true,
  118. username: 'test@test.te',
  119. })
  120. })
  121. })