RESTController.test.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import * as dotenv from 'dotenv'
  2. dotenv.config()
  3. import mongoose from 'mongoose'
  4. mongoose.Promise = Promise
  5. import RESTController from './RESTController'
  6. import { Model } from '../routeGenModel'
  7. const spyFind = jest.spyOn(Model, 'find')
  8. const spyFindOne = jest.spyOn(Model, 'findOne')
  9. const spyCreate = jest.spyOn(Model, 'create')
  10. const spyUpdate = jest.spyOn(Model, 'update')
  11. const spyRemove = jest.spyOn(Model, 'remove')
  12. describe('REST Controller', () => {
  13. const ModelController = new RESTController(Model)
  14. const createdModel = {
  15. name: 'Gisele'
  16. }
  17. const updatedModel = {
  18. name: 'Adriana'
  19. }
  20. let createdId = null
  21. beforeAll(() => {
  22. return mongoose.connect('mongodb://localhost/__test_rest-controller__')
  23. Model.remove({}, err => {
  24. console.log(err)
  25. })
  26. })
  27. afterAll(() => {
  28. Model.remove({}, err => {
  29. console.log(err)
  30. })
  31. })
  32. it('creates an element', () => {
  33. return ModelController.create(createdModel)
  34. .then(response => {
  35. // Check the copy due to a bug with jest.
  36. const copy = {}
  37. Object.keys(Model.schema.paths).forEach(key => {
  38. copy[key] = response[key]
  39. })
  40. createdId = response._id
  41. expect(copy).toMatchObject({__v: 0, ...createdModel})
  42. expect(spyCreate).toHaveBeenCalledWith(createdModel)
  43. expect(spyCreate).toHaveBeenCalledTimes(1)
  44. spyCreate.mockClear()
  45. })
  46. })
  47. it('reads an element', () => {
  48. return ModelController.read(createdId)
  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[key]
  54. })
  55. expect(copy).toMatchObject({__v: 0, ...createdModel})
  56. expect(spyFindOne).toHaveBeenCalledWith({ _id: createdId })
  57. expect(spyFindOne).toHaveBeenCalledTimes(1)
  58. spyFindOne.mockClear()
  59. })
  60. })
  61. it('lists elements', () => {
  62. return ModelController.list()
  63. .then(response => {
  64. // Check the copy due to a bug with jest.
  65. const copy = {}
  66. Object.keys(Model.schema.paths).forEach(key => {
  67. copy[key] = response[0][key]
  68. })
  69. expect(copy).toMatchObject({__v: 0, ...createdModel})
  70. expect(response).toHaveLength(1)
  71. expect(spyFind).toHaveBeenCalledWith({})
  72. expect(spyFind).toHaveBeenCalledTimes(1)
  73. spyFind.mockClear()
  74. })
  75. })
  76. it('update elements', () => {
  77. return ModelController.update(createdId, { name: 'Adriana' })
  78. .then(response => {
  79. // Check the copy due to a bug with jest.
  80. const copy = {}
  81. Object.keys(Model.schema.paths).forEach(key => {
  82. copy[key] = response[key]
  83. })
  84. expect(copy).toMatchObject({ __v: 0, ...updatedModel })
  85. expect(spyFindOne).toHaveBeenCalledWith({ _id: createdId })
  86. expect(spyFindOne).toHaveBeenCalledTimes(1)
  87. spyFindOne.mockClear()
  88. })
  89. })
  90. it('delete elements', () => {
  91. return ModelController.delete(createdId)
  92. .then(response => {
  93. expect(response).toMatchObject({})
  94. expect(spyRemove).toHaveBeenCalledWith({ _id: createdId })
  95. expect(spyRemove).toHaveBeenCalledTimes(1)
  96. spyRemove.mockClear()
  97. })
  98. })
  99. })