|
@@ -0,0 +1,82 @@
|
|
|
+import mongoose from 'mongoose'
|
|
|
+import RESTController from './RESTController'
|
|
|
+import { Model } from '../routeGenModel'
|
|
|
+
|
|
|
+const spyFind = jest.spyOn(Model, 'find')
|
|
|
+const spyFindOne = jest.spyOn(Model, 'findOne')
|
|
|
+const spyCreate = jest.spyOn(Model, 'create')
|
|
|
+const spyRemove = jest.spyOn(Model, 'remove')
|
|
|
+
|
|
|
+describe('REST Controller', () => {
|
|
|
+ mongoose.connect('mongodb://localhost/rest-controller')
|
|
|
+ const ModelController = new RESTController(Model)
|
|
|
+ const createdModel = {
|
|
|
+ name: 'Gisele'
|
|
|
+ }
|
|
|
+ const updatedModel = {
|
|
|
+ name: 'Adriana'
|
|
|
+ }
|
|
|
+ let createdId = null
|
|
|
+
|
|
|
+ it('creates an element', () => {
|
|
|
+ return ModelController.create(createdModel)
|
|
|
+ .then(response => {
|
|
|
+ // Check the copy due to a bug with jest.
|
|
|
+ const copy = {}
|
|
|
+ Object.keys(Model.schema.paths).forEach(key => {
|
|
|
+ copy[key] = response.model[key]
|
|
|
+ })
|
|
|
+ createdId = response.model._id
|
|
|
+ expect(copy).toMatchObject({__v: 0, ...createdModel})
|
|
|
+ expect(spyCreate).toHaveBeenCalledWith(createdModel)
|
|
|
+ expect(spyCreate).toHaveBeenCalledTimes(1)
|
|
|
+ spyCreate.mockReset()
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ it('reads an element', () => {
|
|
|
+ return ModelController.read(createdId)
|
|
|
+ .then(response => {
|
|
|
+ // Check the copy due to a bug with jest.
|
|
|
+ const copy = {}
|
|
|
+ Object.keys(Model.schema.paths).forEach(key => {
|
|
|
+ copy[key] = response.model[key]
|
|
|
+ })
|
|
|
+ expect(copy).toMatchObject({__v: 0, ...createdModel})
|
|
|
+ expect(spyFindOne).toHaveBeenCalledWith({ _id: createdId })
|
|
|
+ expect(spyFindOne).toHaveBeenCalledTimes(1)
|
|
|
+ spyFindOne.mockReset()
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ it('lists elements', () => {
|
|
|
+ return ModelController.list()
|
|
|
+ .then(response => {
|
|
|
+ // Check the copy due to a bug with jest.
|
|
|
+ const copy = {}
|
|
|
+ Object.keys(Model.schema.paths).forEach(key => {
|
|
|
+ copy[key] = response.model[0][key]
|
|
|
+ })
|
|
|
+ expect(copy).toMatchObject({__v: 0, ...createdModel})
|
|
|
+ expect(response.model).toHaveLength(2)
|
|
|
+ expect(spyFind).toHaveBeenCalledWith({})
|
|
|
+ expect(spyFind).toHaveBeenCalledTimes(1)
|
|
|
+ spyFind.mockReset()
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ it('update elements', () => {
|
|
|
+ return ModelController.update(createdId, { name: 'Adriana' })
|
|
|
+ .then(response => {
|
|
|
+ // Check the copy due to a bug with jest.
|
|
|
+ const copy = {}
|
|
|
+ Object.keys(Model.schema.paths).forEach(key => {
|
|
|
+ copy[key] = response.model[0][key]
|
|
|
+ })
|
|
|
+ expect(copy).toMatchObject({__v: 0, ...updatedModel})
|
|
|
+ expect(spyFind).toHaveBeenCalledWith({})
|
|
|
+ expect(spyFind).toHaveBeenCalledTimes(1)
|
|
|
+ spyFind.mockReset()
|
|
|
+ })
|
|
|
+ })
|
|
|
+})
|