let mongoose = require("mongoose"); let UserModel = require('../models/user'); let AppUserModel = require('../models/app-user'); //Require the dev-dependencies let chai = require('chai'); let chaiHttp = require('chai-http'); let server = require('../server'); let should = chai.should(); chai.use(chaiHttp); //Our parent block describe('Users', () => { beforeEach((done) => { //Before each test we empty the database UserModel.remove({}, (err) => { done(); }); }); /* * Test the /GET route */ describe('/GET users', () => { it('it should GET all the users', (done) => { chai.request(server) .get('/users') .end((err, res) => { res.should.have.status(200); res.body.should.be.a('array'); res.body.length.should.be.eql(0); done(); }); }); }); /* * Test the /POST route */ describe('/POST users', () => { let token; before(function (done) { AppUserModel.remove({}, (err) => { done(); }) }); before(function (done) { let appUser = { username: 'testUsr', password: '$2a$10$i9cBC06uGJnnrqQCh8COkuZLMChLQqw5j4K0yfDQn1udTDAompHka' }; let appUserEncoded = { username: appUser.username, password: 'simplePass' }; let appUserModel = new AppUserModel(appUser); appUserModel.save(); chai.request(server) .post('/authenticate') .send(appUserEncoded) .end(function (err, res) { const result = JSON.parse(res.text); token = result.token; done(); }); }); it('it should not POST a user without auth-token in header', (done) => { chai.request(server) .post('/users') .send({}) .end((err, res) => { res.should.have.status(403); res.body.should.be.a('object'); res.body.should.have.property('success').eql(false); res.body.should.have.property('message').eql('No token provided.'); done(); }); }); it('it should POST a user with provided username', (done) => { const user = {username: 'john'}; chai.request(server) .post('/users') .set('x-access-token', token) .send(user) .end((err, res) => { res.should.have.status(201); res.body.should.be.a('object'); res.body.should.have.property('username').eql(user.username); res.body.should.have.property('squadId').eql(null); res.body.should.have.property('rankLvl').eql(0); done(); }); }); }); });