Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const expect = require('expect');
  2. const request = require('supertest');
  3. const {ObjectID} = require('mongodb');
  4.  
  5. const {app} = require('./../server.js');
  6. const {Todo} = require('./../models/todo');
  7.  
  8. const todos = [{
  9.     _id: new ObjectID(),
  10.     text: 'First todo test',
  11.     completed: false
  12. },{
  13.     _id: new ObjectID(),
  14.     text: 'Second todo test',
  15.     completed: true,
  16.     completedAt: 333
  17. }]
  18.  
  19. beforeEach((done) => {
  20.     Todo.remove({}).then(() => {
  21.         return Todo.insertMany(todos);
  22.     }).then (() => done());
  23. });
  24.  
  25. describe('POST /todos',() =>{
  26.     it('Should create a new todo',(done) => {
  27.         var text = 'Test todo text';
  28.  
  29.         request(app)
  30.             .post('/todos')
  31.             .send({text})
  32.             .expect(200)
  33.             .expect((res) => {
  34.                 expect(res.body.text).toBe(text);
  35.             })
  36.             .end((err, res) => {
  37.                 if (err){return done(err);}
  38.  
  39.                 Todo.find({text}).then((todos) => {
  40.                     expect(todos.length).toBe(1);
  41.                     expect(todos[0].text).toBe(text);
  42.                     done();
  43.                 }).catch((e) => done(e));
  44.             });
  45.     });
  46.  
  47.     it('Should not create a todo with invalid body data', (done) => {
  48.         request(app)
  49.             .post('/todos')
  50.             .send({})
  51.             .expect(400)
  52.             .end((err, res) => {
  53.                 if(err){return done(err);}
  54.  
  55.                 Todo.find().then((todos) => {
  56.                     expect(todos.length).toBe(2);
  57.                     done();
  58.                 }).catch((e) => done(e));
  59.             });
  60.     });
  61. });
  62.  
  63. describe('GET /todos', () => {
  64.     it('Should get all todos', (done) => {
  65.         request(app)
  66.             .get('/todos')
  67.             .expect(200)
  68.             .expect((res) => {
  69.                 expect(res.body.todos.length).toBe(2);
  70.             })
  71.             .end(done);
  72.     });
  73. });
  74.  
  75. describe('GET /todos/:id', () => {
  76.     it('Should return todo by id', (done) => {
  77.         request(app)
  78.             .get(`/todos/${todos[0]._id.toHexString()}`)
  79.             .expect(200)
  80.             .expect((res) => {
  81.                 expect(res.body.todo.text).toBe(todos[0].text);
  82.             })
  83.         .end(done);
  84.     });
  85.  
  86.     it('Should return a 404 if todo not found', (done) => {
  87.         var id = new ObjectID().toHexString();
  88.         request(app)
  89.             .get(`/todos/${id}`)
  90.             .expect(404)
  91.         .end(done);
  92.     });
  93.    
  94.     it('Should return a 404 if invalid id', (done) => {
  95.         request(app)
  96.         .get(`/todos/123`)
  97.         .expect(404)
  98.         .end(done);
  99.     });
  100. });
  101.  
  102. describe('DELETE /todos/:id', () => {
  103.     it('Should remove a todo by id', (done) =>{
  104.         var id = todos[1]._id.toHexString();
  105.  
  106.         request(app)
  107.             .delete(`/todos/${id}`)
  108.             .expect(200)
  109.             .expect((res) => {
  110.                 expect(res.body.todo._id).toBe(id);
  111.             })
  112.         .end((err, res) => {
  113.             if(err){
  114.                 return done(err);
  115.             }
  116.  
  117.             Todo.findById(id).then((todo) => {
  118.                 expect(todo).toNotExist();
  119.                 done();
  120.             }).catch((e) => done(e));
  121.         });
  122.     });
  123.    
  124.     it('Should return 404 if todo not found', (done) =>{
  125.         var id = new ObjectID().toHexString();
  126.         request(app)
  127.             .delete(`/todos/${id}`)
  128.             .expect(404)
  129.         .end(done);
  130.     });
  131.            
  132.     it('Should return 404 if invalid id', (done) =>{
  133.         request(app)
  134.             .delete(`/todos/123`)
  135.             .expect(404)
  136.         .end(done);
  137.     });
  138. });
  139.  
  140. describe('PATCH /todos/:id',() => {
  141.     it('Should update a todo to completed', (done) => {
  142.         var id = todos[0]._id.toHexString();
  143.  
  144.         var sendBody ={
  145.             text:'text From test',
  146.             completed: true
  147.         };
  148.  
  149.         request(app)
  150.             .patch(`/todos/${id}`)
  151.             .send(sendBody)
  152.             .expect(200)
  153.             .expect((res) => {
  154.                 expect(res.body.todo.text).toBe(sendBody.text);
  155.                 expect(res.body.todo.completed).toBe(true);
  156.                 expect(res.body.todo.completedAt).toBeA('number');
  157.             })
  158.         .end(done);
  159.     });
  160.  
  161.     it('Should clear completedAt when todo is not completed', (done) =>{
  162.         var id = todos[1]._id.toHexString();
  163.         request(app)
  164.             .patch(`/todos/${id}`)
  165.             .send({completed: false})
  166.             .expect(200)
  167.             .expect((res) => {
  168.                 expect(res.body.todo.completed).toBe(false);
  169.                 expect(res.body.todo.completedAt).toBe(null);
  170.             })
  171.         .end(done);
  172.  
  173.     })
  174. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement