import supertest from 'supertest'; import should from 'should/as-function'; import db from '../db'; describe('/', () => { let server; before(done => { process.env.port = '2999'; process.env.NODE_ENV = 'test'; 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 root message', done => { supertest(server) .get('/') .expect('Content-type', /json/) .expect(200) .end((err, res) => { if (err) done (err); should(res.body).be.eql({status: 'API server up and running!'}); done(); }); }); }); describe('Unknown routes', () => { let server; before(done => { 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('return a 404 message', done => { supertest(server) .get('/unknownroute') .expect(404) .end((err, res) => { if (err) done (err); should(res.body).be.eql({status: 'Not found'}); done(); }); }); }); describe('An unauthorized request', () => { let server; before(done => { 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 a 401 message', done => { supertest(server) .get('/authorized') .expect(401) .end((err, res) => { if (err) done (err); should(res.body).be.eql({status: 'Unauthorized'}); done(); }); }); it('does not work with correct username', done => { supertest(server) .get('/authorized') .auth('admin', 'Abc123!!') .expect(401) .end((err, res) => { if (err) done (err); should(res.body).be.eql({status: 'Unauthorized'}); done(); }); }); }); describe('An authorized request', () => { let server; before(done => { 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('works with an API key', done => { supertest(server) .get('/authorized?key=5ea131671feb9c2ee0aafc9a') .expect(200) .end((err, res) => { if (err) done (err); should(res.body).be.eql({status: 'Authorization successful', method: 'key'}); done(); }); }); it('works with basic auth', done => { supertest(server) .get('/authorized') .auth('admin', 'Abc123!#') .expect(200) .end((err, res) => { if (err) done (err); should(res.body).be.eql({status: 'Authorization successful', method: 'basic'}); done(); }); }); });