daily pastebin goal
40%
SHARE
TWEET

Untitled

a guest Oct 23rd, 2017 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const chai = require('chai');
  2. const chaiHttp = require('chai-http');
  3. const faker = require('faker');
  4. const mongoose = require('mongoose');
  5. const jwt = require('jsonwebtoken');
  6. const request = require('supertest');
  7.  
  8. const {app, runServer, closeServer} = require('../server');
  9. const {BlogPost} = require('../models/posts');
  10. const User = require('../models/user');
  11. const should = chai.should();
  12. const {TEST_DATABASE_URL} = require('../config');
  13. const {JWT_SECRET} = require('../config');
  14.  
  15. chai.use(chaiHttp);
  16.  
  17. function tearDownDb() {
  18.     console.warn('Deleting database');
  19.     return mongoose.connection.dropDatabase();
  20. }
  21.  
  22. function seedBlogData() {
  23.     console.info('seeding blog data');
  24.     const seedData = [];
  25.     for (let i=1; i<=10; i++) {
  26.         seedData.push({
  27.             author: {
  28.                 firstName: faker.name.firstName(),
  29.                 lastName: faker.name.lastName()
  30.             },
  31.             title: faker.lorem.sentence(),
  32.             content: faker.lorem.text(),
  33.       image: faker.image.image()
  34.         });
  35.     }
  36.     BlogPost.insertMany(seedData).then(() => {
  37.      var newUser = new User({
  38.       email: 'abc@123.com',
  39.       password: 'password',
  40.       confirmPassword: 'password',
  41.       firstName: 'Billy',
  42.       lastName: 'Bob',
  43.       username: 'username'
  44.     });
  45.  
  46.     // Attempt to save the user
  47.     newUser.save().then((user) => {
  48.           return user;
  49.     });
  50.   });
  51. }
  52.  
  53. describe('Blog API resource', function() {
  54.   let user;
  55.  
  56.   before(function() {
  57.     return runServer(TEST_DATABASE_URL);
  58.   });
  59.  
  60.   beforeEach(function() {
  61.     const data = seedBlogData();
  62.     console.log(data);
  63.     return data;
  64.   });
  65.  
  66.   afterEach(function() {
  67.     return tearDownDb();
  68.   });
  69.  
  70.   after(function() {
  71.     return closeServer();
  72.   })
  73.  
  74.   describe('GET endpoint', function() {
  75.  
  76.     it('should return all existing blogs', function() {
  77.         let res;
  78.         return chai.request(app)
  79.             .get('/api/posts')
  80.             .then(function(_res) {
  81.                 res = _res;
  82.                 res.should.have.status(200);
  83.                 res.body.should.have.length.of.at.least(1);
  84.                 return BlogPost.count();
  85.             })
  86.             .then(function(count) {
  87.                 res.body.should.have.lengthOf(count);
  88.             });
  89.     });
  90.  
  91.     it('should return blogs with right fields', function() {
  92.         let resBlog;
  93.         chai.request(app)
  94.             .get('/posts')
  95.             .then(function(res) {
  96.                 res.should.have.status(200);
  97.                 res.should.be.json;
  98.                 res.body.blogs.should.be.a('array');
  99.                 res.body.blogs.should.have.a.length.of.at.least(1);
  100.  
  101.                 res.body.blogs.forEach(function(blog) {
  102.                     blog.should.be.a('object');
  103.                     blog.should.include.keys(
  104.                         'title', 'author', 'content', 'comments');
  105.                 });
  106.                 resBlog = res.body.blogs[0];
  107.                 return BlogPost.findById(resBlogPost.id);
  108.             })
  109.             .then(function(restaurant) {
  110.                 resBlogPost.title.should.equal(blog.title);
  111.                 resBlogPost.content.should.equal(blog.content);
  112.                 resBlogPost.author.should.equal(blog.authorName);
  113.             });
  114.     });
  115.   });
  116.  
  117.   describe('POST endpoint', function() {
  118.      it('it responds with 401 status code if no authorization header', function(done) {
  119.         request(app).get('/api/posts').expect(401).end(function(err, res) {
  120.             if (err) return done(err);
  121.             done();
  122.         });
  123.     });
  124.  
  125.     it('it responds with JSON if no authorization header', function(done) {
  126.         request(app).get('/api/posts').expect('Content-Type', /json/).end(function(err, res) {
  127.             if (err) return done(err);
  128.             done();
  129.         });
  130.     });
  131.  
  132.     it('it responds with 200 status code if good authorization header', function(done) {
  133.         var token = jwt.sign({
  134.             id: 1,
  135.         }, JWT_SECRET, { expiresIn: 60*60 });
  136.         request(app)
  137.             .get('/api/posts')
  138.             .set('Authorization', token)
  139.             .expect(200)
  140.             .end(function(err, res) {
  141.                 if (err) return done(err);
  142.                 done();
  143.         });
  144.     });
  145.  
  146.     it('it responds with JSON if good authorization header', function(done) {
  147.         var token = jwt.sign({
  148.             id: 1,
  149.         }, JWT_SECRET, { expiresIn: 60*60 });
  150.         request(app)
  151.             .get('/api/posts')
  152.             .set('Authorization', token)
  153.             .expect('Content-Type', /json/)
  154.             .end(function(err, res) {
  155.                 if (err) return done(err);
  156.                 done();
  157.         });
  158.     });
  159.  
  160.     it('should add a new blog', function() {
  161.       var token = jwt.sign({
  162.             id: 1,
  163.         }, JWT_SECRET, { expiresIn: 60*60 });
  164.         request(app)
  165.             .get('/api/posts')
  166.             .set('Authorization', token)
  167.             .expect('Content-Type', /json/)
  168.             .end(function(err, res) {
  169.                 if (err) return done(err);
  170.                 done();
  171.         });
  172.          const newPost = {
  173.           title: faker.lorem.sentence(),
  174.           author: {
  175.             firstName: faker.name.firstName(),
  176.             lastName: faker.name.lastName(),
  177.           },
  178.           content: faker.lorem.text(),
  179.           image: faker.image.image()
  180.       };
  181.          return chai.request(app)
  182.             .post('/api/posts')
  183.             .send(newPost)
  184.             .then(function(res) {
  185.               res.should.have.status(201);
  186.               res.should.be.json;
  187.               res.body.should.be.a('object');
  188.               res.body.should.include.keys(
  189.                 'id', 'title', 'author', 'content', 'image');
  190.               res.body.title.should.equal(newPost.title);
  191.               res.body.id.should.not.be.null;
  192.               res.body.author.should.equal(
  193.                 `${newPost.author.firstName} ${newPost.author.lastName}`);
  194.               res.body.content.should.equal(newPost.content);
  195.               return BlogPost.findById(res.body.id);
  196.             })
  197.             .then(function(post) {
  198.               post.title.should.equal(newPost.title);
  199.               post.content.should.equal(newPost.content);
  200.               post.author.firstName.should.equal(newPost.author.firstName);
  201.               post.author.lastName.should.equal(newPost.author.lastName);
  202.         });
  203.     });
  204.   });
  205.  
  206.   describe('DELETE endpoint', function() {
  207.     it('delete a blog by id', function() {
  208.         let blog;
  209.  
  210.         return BlogPost
  211.           .findOne()
  212.           .then(function(_blog) {
  213.             blog = _blog;
  214.             return chai.request(app).delete(`/api/posts/${blog.id}`);
  215.           })
  216.           .then(function(res) {
  217.             res.should.have.status(204);
  218.             return BlogPost.findById(blog.id);
  219.           })
  220.           .then(function(_blog) {
  221.             should.not.exist(_blog);
  222.           });
  223.     });
  224.   });
  225.  });
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top