| 
					
				 | 
			
			
				@@ -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() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 |