micdrop
Version:
MicroService baseline using Express
182 lines (152 loc) • 4.27 kB
JavaScript
const mocha = require('mocha');
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../server');
const describe = mocha.describe;
const it = mocha.it;
const assert = chai.assert;
chai.use(chaiHttp);
const URI = '/person/';
const BASE = {
FirstName: 'First',
LastName: 'Last',
BirthDate: '01/01/1970'
};
let deleteEntry = (id) => {
chai.request(server)
.delete(URI + id)
.end( (err, res) => {
assert.isNull(err);
});
};
describe('HTTP service', () => {
it('should allow creation of new item', (done) => {
chai.request(server)
.post(URI)
.send(BASE)
.end( (err, res) => {
assert.isNull(err);
assert.equal(res.statusCode, 200);
let id = res.headers.location;
assert.isNotNull(id);
deleteEntry(id);
done();
});
});
it('should complain if you try to create with no body', (done) => {
chai.request(server)
.post(URI)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(res.statusCode, 400);
done();
});
});
it('should return an existing item', (done) => {
chai.request(server)
.post(URI)
.send(BASE)
.end( (err, res) => {
assert.isNull(err);
assert.equal(res.statusCode, 200);
assert.property(res.headers, 'location');
let id = res.headers.location;
assert.isNotNull(id);
chai.request(server)
.get(URI + id)
.end( (err, res) => {
assert.isNull(err);
assert.deepEqual(res.body, BASE);
deleteEntry(id);
done();
});
});
});
it('should process HEAD correctly', (done) => {
chai.request(server)
.post(URI)
.send(BASE)
.end( (err, res) => {
assert.isNull(err);
assert.equal(res.statusCode, 200);
let id = res.headers.location;
assert.isNotNull(id);
chai.request(server)
.get(URI + id)
.end( (err, res) => {
assert.isNull(err);
assert.deepEqual(res.body, BASE);
let getHeaders = res.headers;
chai.request(server)
.head(URI + id)
.end( (err, res) => {
assert.isNull(err);
assert(!res.body || !Object.keys(res.body).len);
let headHeaders = res.headers;
assert.deepEqual(getHeaders, headHeaders);
deleteEntry(id);
done();
});
});
});
});
it('should complain if you try to GET all (not implemented)', (done) => {
chai.request(server)
.get(URI)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(err.response.statusCode, 405);
done();
});
});
it('should complain if you try to PUT without an id', (done) => {
chai.request(server)
.put(URI)
.send(BASE)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(err.response.statusCode, 400);
done();
});
});
it('should complain if you try to PUT (not implemented)', (done) => {
chai.request(server)
.put(URI + '1234')
.send(BASE)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(err.response.statusCode, 405);
done();
});
});
it('should complain if you try to PATCH without an id', (done) => {
chai.request(server)
.patch(URI)
.send(BASE)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(err.response.statusCode, 400);
done();
});
});
it('should complain if you try to PATCH (not implemented)', (done) => {
chai.request(server)
.patch(URI + '1234')
.send(BASE)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(err.response.statusCode, 405);
done();
});
});
it('should complain if you try to DELETE without an id', (done) => {
chai.request(server)
.delete(URI)
.send(BASE)
.end( (err, res) => {
assert.isNotNull(err);
assert.equal(err.response.statusCode, 400);
done();
});
});
});