import TestHelper from "../test/helper"; import db from '../db'; describe('/', () => { let server; before(done => TestHelper.before(done)); beforeEach(done => server = TestHelper.beforeEach(server, done)); afterEach(done => TestHelper.afterEach(server, done)); after(done => TestHelper.after(done)); describe('GET /', () => { it('returns the root message', done => { TestHelper.request(server, done, { method: 'get', url: '/', httpStatus: 200, res: {status: 'API server up and running!'} }); }); }); describe('Unknown routes', () => { it('return a 404 message', done => { TestHelper.request(server, done, { method: 'get', url: '/unknownroute', httpStatus: 404 }); }); }); describe('An unauthorized request', () => { it('returns a 401 message', done => { TestHelper.request(server, done, { method: 'get', url: '/authorized', httpStatus: 401 }); }); it('does not work with correct username', done => { TestHelper.request(server, done, { method: 'get', url: '/authorized', auth: {basic: {name: 'admin', pass: 'Abc123!!'}}, httpStatus: 401 }); }); it('does not work with incorrect username', done => { TestHelper.request(server, done, { method: 'get', url: '/authorized', auth: {basic: {name: 'adminxx', pass: 'Abc123!!'}}, httpStatus: 401 }); }); }); describe('An authorized request', () => { it('works with an API key', done => { TestHelper.request(server, done, { method: 'get', url: '/authorized', auth: {key: 'admin'}, httpStatus: 200, res: {status: 'Authorization successful', method: 'key'} }); }); it('works with basic auth', done => { TestHelper.request(server, done, { method: 'get', url: '/authorized', auth: {basic: 'admin'}, httpStatus: 200, res: {status: 'Authorization successful', method: 'basic'} }); }); }); describe('An invalid JSON body', () => { it('is rejected', done => { TestHelper.request(server, done, { method: 'post', url: '/', httpStatus: 400, reqType: 'json', req: '{"xxx"}', res: {status: 'Invalid JSON body'} }); }); }); describe('A not connected database', () => { // RUN AS LAST OR RECONNECT DATABASE!! it('resolves to an 500 error', done => { db.disconnect(() => { TestHelper.request(server, done, { method: 'get', url: '/', httpStatus: 500 }); }); }); }); }); describe('The /api/{url} redirect', () => { let server; let counter = 0; // count number of current test method before(done => { process.env.port = '2999'; db.connect('test', done); }); beforeEach(done => { process.env.NODE_ENV = counter === 1 ? 'production' : 'test'; counter ++; server = TestHelper.beforeEach(server, done); }); afterEach(done => TestHelper.afterEach(server, done)); after(done => TestHelper.after(done)); it('returns the right method', done => { TestHelper.request(server, done, { method: 'get', url: '/api/authorized', auth: {basic: 'admin'}, httpStatus: 200, res: {status: 'Authorization successful', method: 'basic'} }); }); it('is disabled in production', done => { TestHelper.request(server, done, { method: 'get', url: '/api/authorized', auth: {basic: 'admin'}, httpStatus: 404 }); }); });