FeaturesController.spec.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import 'reflect-metadata'
  2. import * as express from 'express'
  3. import { FeaturesController } from './FeaturesController'
  4. import { results } from 'inversify-express-utils'
  5. import { User } from '../Domain/User/User'
  6. import { GetUserFeatures } from '../Domain/UseCase/GetUserFeatures/GetUserFeatures'
  7. import { ControllerContainerInterface } from '@standardnotes/domain-core'
  8. describe('FeaturesController', () => {
  9. let getUserFeatures: GetUserFeatures
  10. let request: express.Request
  11. let response: express.Response
  12. let user: User
  13. let controllerContainer: ControllerContainerInterface
  14. const createController = () => new FeaturesController(getUserFeatures, controllerContainer)
  15. beforeEach(() => {
  16. controllerContainer = {} as jest.Mocked<ControllerContainerInterface>
  17. controllerContainer.register = jest.fn()
  18. user = {} as jest.Mocked<User>
  19. user.uuid = '123'
  20. getUserFeatures = {} as jest.Mocked<GetUserFeatures>
  21. getUserFeatures.execute = jest.fn()
  22. request = {
  23. headers: {},
  24. body: {},
  25. params: {},
  26. } as jest.Mocked<express.Request>
  27. response = {
  28. locals: {},
  29. } as jest.Mocked<express.Response>
  30. })
  31. it('should get authenticated user features', async () => {
  32. request.params.userUuid = '1-2-3'
  33. response.locals.user = {
  34. uuid: '1-2-3',
  35. }
  36. getUserFeatures.execute = jest.fn().mockReturnValue({ success: true })
  37. const httpResponse = <results.JsonResult>await createController().getFeatures(request, response)
  38. const result = await httpResponse.executeAsync()
  39. expect(getUserFeatures.execute).toHaveBeenCalledWith({
  40. userUuid: '1-2-3',
  41. offline: false,
  42. })
  43. expect(result.statusCode).toEqual(200)
  44. })
  45. it('should not get user features if the user with provided uuid does not exist', async () => {
  46. request.params.userUuid = '1-2-3'
  47. response.locals.user = {
  48. uuid: '1-2-3',
  49. }
  50. getUserFeatures.execute = jest.fn().mockReturnValue({ success: false })
  51. const httpResponse = <results.JsonResult>await createController().getFeatures(request, response)
  52. const result = await httpResponse.executeAsync()
  53. expect(getUserFeatures.execute).toHaveBeenCalledWith({ userUuid: '1-2-3', offline: false })
  54. expect(result.statusCode).toEqual(400)
  55. })
  56. it('should not get user features if not allowed', async () => {
  57. request.params.userUuid = '1-2-3'
  58. response.locals.user = {
  59. uuid: '2-3-4',
  60. }
  61. getUserFeatures.execute = jest.fn()
  62. const httpResponse = <results.JsonResult>await createController().getFeatures(request, response)
  63. const result = await httpResponse.executeAsync()
  64. expect(getUserFeatures.execute).not.toHaveBeenCalled()
  65. expect(result.statusCode).toEqual(401)
  66. })
  67. })