RESTController.test.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import mongoose from 'mongoose'
  2. import RESTController from './RESTController'
  3. import { Model } from '../routeGenModel'
  4. const spyFind = jest.spyOn(Model, 'find')
  5. const spyFindOne = jest.spyOn(Model, 'findOne')
  6. const spyCreate = jest.spyOn(Model, 'create')
  7. const spyRemove = jest.spyOn(Model, 'remove')
  8. describe('REST Controller', () => {
  9. mongoose.connect('mongodb://localhost/rest-controller')
  10. const ModelController = new RESTController(Model)
  11. const createdModel = {
  12. name: 'Gisele'
  13. }
  14. const updatedModel = {
  15. name: 'Adriana'
  16. }
  17. let createdId = null
  18. it('creates an element', () => {
  19. return ModelController.create(createdModel)
  20. .then(response => {
  21. // Check the copy due to a bug with jest.
  22. const copy = {}
  23. Object.keys(Model.schema.paths).forEach(key => {
  24. copy[key] = response.model[key]
  25. })
  26. createdId = response.model._id
  27. expect(copy).toMatchObject({__v: 0, ...createdModel})
  28. expect(spyCreate).toHaveBeenCalledWith(createdModel)
  29. expect(spyCreate).toHaveBeenCalledTimes(1)
  30. spyCreate.mockReset()
  31. })
  32. })
  33. it('reads an element', () => {
  34. return ModelController.read(createdId)
  35. .then(response => {
  36. // Check the copy due to a bug with jest.
  37. const copy = {}
  38. Object.keys(Model.schema.paths).forEach(key => {
  39. copy[key] = response.model[key]
  40. })
  41. expect(copy).toMatchObject({__v: 0, ...createdModel})
  42. expect(spyFindOne).toHaveBeenCalledWith({ _id: createdId })
  43. expect(spyFindOne).toHaveBeenCalledTimes(1)
  44. spyFindOne.mockReset()
  45. })
  46. })
  47. it('lists elements', () => {
  48. return ModelController.list()
  49. .then(response => {
  50. // Check the copy due to a bug with jest.
  51. const copy = {}
  52. Object.keys(Model.schema.paths).forEach(key => {
  53. copy[key] = response.model[0][key]
  54. })
  55. expect(copy).toMatchObject({__v: 0, ...createdModel})
  56. expect(response.model).toHaveLength(2)
  57. expect(spyFind).toHaveBeenCalledWith({})
  58. expect(spyFind).toHaveBeenCalledTimes(1)
  59. spyFind.mockReset()
  60. })
  61. })
  62. it('update elements', () => {
  63. return ModelController.update(createdId, { name: 'Adriana' })
  64. .then(response => {
  65. // Check the copy due to a bug with jest.
  66. const copy = {}
  67. Object.keys(Model.schema.paths).forEach(key => {
  68. copy[key] = response.model[0][key]
  69. })
  70. expect(copy).toMatchObject({__v: 0, ...updatedModel})
  71. expect(spyFind).toHaveBeenCalledWith({})
  72. expect(spyFind).toHaveBeenCalledTimes(1)
  73. spyFind.mockReset()
  74. })
  75. })
  76. })