import supertest from 'supertest'; import should from 'should/as-function'; import db from '../db'; import userModel from '../models/user'; describe('/user/new', () => { let server; before(done => { process.env.port = '2999'; db.connect('test', done); }); beforeEach(done => { delete require.cache[require.resolve('../index')]; // prevent loading from cache server = require('../index'); db.drop(err => { // reset database if (err) return done(err); db.loadJson(require('../test/db.json'), done); }); }); afterEach(done => { server.close(done); }); it('returns the added user data', done => { supertest(server) .post('/user/new') .send({email: 'john.doe@bosch.com', name: 'johndoe', pass: 'Abc123!#', level: 'read', location: 'Rng', device_name: 'Alpha II'}) .expect('Content-type', /json/) .expect(200, (err, res) => { if (err) return done(err); should(res.body).have.property('_id').be.type('string'); should(res.body).have.property('email', 'john.doe@bosch.com'); should(res.body).have.property('name', 'johndoe'); should(res.body).have.property('level', 'read'); should(res.body).have.property('location', 'Rng'); should(res.body).have.property('device_name', 'Alpha II'); done(); }); }); it('stores the data', done => { supertest(server) .post('/user/new') .send({email: 'john.doe@bosch.com', name: 'johndoe', pass: 'Abc123!#', level: 'read', location: 'Rng', device_name: 'Alpha II'}) .expect(200, err => { if (err) return done(err); userModel.find({name: 'johndoe'}).lean().exec( 'find', (err, data) => { if (err) return done(err); should(data).have.lengthOf(1); should(data[0]).have.only.keys('_id', 'name', 'pass', 'email', 'level', 'location', 'device_name', 'key', '__v'); should(data[0]).have.property('_id'); should(data[0]).have.property('name', 'johndoe'); should(data[0]).have.property('email', 'john.doe@bosch.com'); should(data[0]).have.property('pass').not.eql('Abc123!#'); should(data[0]).have.property('level', 'read'); should(data[0]).have.property('location', 'Rng'); should(data[0]).have.property('device_name', 'Alpha II'); done(); }); }); }); it('rejects a username already in use', done => { supertest(server) .post('/user/new') .send({email: 'j.doe@bosch.com', name: 'janedoe', pass: 'Abc123!#', level: 'read', location: 'Rng', device_name: 'Alpha II'}) .expect(400, err => { if (err) return done(err); userModel.find({name: 'janedoe'}).lean().exec( 'find', (err, data) => { if (err) return done(err); should(data).have.lengthOf(1); done(); }); }); }); // TODO: authentication });