let UserModel = require('../models/user'); let urls = require('../config/api-url'); let codes = require('../routes/http-codes'); // Require the dev-dependencies let chai = require('chai'); let chaiHttp = require('chai-http'); let server = require('../server'); // chai methods require('chai').should(); chai.use(chaiHttp); // Our parent block describe('Users', () => { beforeEach((done) => { // Before each test we empty the database UserModel.deleteMany({}, (err) => { done(); }); }); /* * Test the /GET route */ describe('/GET users', () => { it('it should GET all the users', (done) => { chai.request(server) .get(urls.users) .end((err, res) => { res.should.have.status(codes.success); 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', // permission: 2 // }; // let appUserEncoded = { // username: appUser.username, // password: 'simplePass' // }; // let appUserModel = new AppUserModel(appUser); // appUserModel.save(); // // chai.request(server) // .post(urls.auth) // .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 provided', (done) => { chai.request(server) .post(urls.users) .send({}) .end((err, res) => { res.should.have.status(codes.forbidden); 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(urls.users) // .set('x-access-token', token) // .send(user) // .end((err, res) => { // res.should.have.status(codes.created); // res.body.should.be.a('object'); // res.body.should.have.property('username').eql(user.username); // res.body.should.have.property('squad').eql(null); // res.body.should.have.property('rank').property('level').eql(0); // res.body.should.have.property('awards').eql([]); // done(); // }); // }); }); /* * Test the /PUT route */ describe('/PUT users', () => { it('it should not PUT a user without auth-token provided', (done) => { chai.request(server) .put(urls.users + '/someId') .send({_id: 'someId'}) .end((err, res) => { res.should.have.status(codes.forbidden); 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(); }); }); }); /* * Test the /DELETE route */ describe('/DELETE users', () => { it('it should not accept DELETE method without id in url', (done) => { chai.request(server) .delete(urls.users) .send({}) .end((err, res) => { res.should.have.status(codes.wrongmethod); res.body.should.be.a('object'); res.body.should.have.property('error').property('message') .eql('this method is not allowed at ' + urls.users); done(); }); }); it('it should not DELETE a user without auth-token provided', (done) => { chai.request(server) .delete(urls.users + '/someId') .send({}) .end((err, res) => { res.should.have.status(codes.forbidden); 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(); }); }); }); });