75 lines
2.9 KiB
TypeScript
75 lines
2.9 KiB
TypeScript
|
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
|
||
|
});
|