Archived
2
This repository has been archived on 2023-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
definma-api/src/routes/root.spec.ts

140 lines
3.6 KiB
TypeScript
Raw Normal View History

import TestHelper from "../test/helper";
2020-05-28 11:47:51 +02:00
import db from '../db';
2020-01-14 13:25:13 +01:00
2020-04-27 11:44:28 +02:00
describe('/', () => {
let server;
2020-04-27 11:44:28 +02:00
before(done => TestHelper.before(done));
beforeEach(done => server = TestHelper.beforeEach(server, done));
afterEach(done => TestHelper.afterEach(server, done));
2020-05-28 11:47:51 +02:00
after(done => TestHelper.after(done));
2020-01-14 13:25:13 +01:00
2020-04-27 11:44:28 +02:00
describe('GET /', () => {
it('returns the root message', done => {
TestHelper.request(server, done, {
method: 'get',
url: '/',
httpStatus: 200,
res: {status: 'API server up and running!'}
2020-01-14 13:25:13 +01:00
});
});
});
2020-04-23 13:59:45 +02:00
2020-04-27 11:44:28 +02:00
describe('Unknown routes', () => {
it('return a 404 message', done => {
TestHelper.request(server, done, {
method: 'get',
url: '/unknownroute',
httpStatus: 404
});
2020-04-23 13:59:45 +02:00
});
});
2020-04-27 11:44:28 +02:00
describe('An unauthorized request', () => {
it('returns a 401 message', done => {
TestHelper.request(server, done, {
method: 'get',
url: '/authorized',
httpStatus: 401
2020-04-23 13:59:45 +02:00
});
2020-04-27 11:44:28 +02:00
});
it('does not work with correct username', done => {
TestHelper.request(server, done, {
method: 'get',
url: '/authorized',
2020-05-28 11:47:51 +02:00
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!!'}},
2020-04-27 11:44:28 +02:00
httpStatus: 401
2020-04-23 13:59:45 +02:00
});
});
});
2020-04-27 11:44:28 +02:00
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'}
2020-04-23 13:59:45 +02:00
});
2020-04-27 11:44:28 +02:00
});
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'}
2020-04-23 13:59:45 +02:00
});
2020-04-27 11:44:28 +02:00
});
});
2020-05-28 11:47:51 +02:00
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!!
2020-05-28 11:47:51 +02:00
it('resolves to an 500 error', done => {
db.disconnect(() => {
TestHelper.request(server, done, {
method: 'get',
url: '/',
httpStatus: 500
});
});
});
});
});
2020-05-28 11:47:51 +02:00
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
});
});
});