@xervo/api-util
Version:
wrapper to make API request simpler
125 lines (107 loc) • 3.21 kB
JavaScript
const Assign = require('lodash.assign');
const Code = require('code');
const Lab = require('lab');
const Nock = require('nock');
const Series = require('run-series');
const Client = require('..')();
const lab = exports.lab = Lab.script();
const describe = lab.describe;
const it = lab.it;
const expect = Code.expect;
const beforeEach = lab.beforeEach;
const afterEach = lab.afterEach;
const HEADERS = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'API-Version': 'v2'
};
describe('Client.post', function () {
var scope, data;
beforeEach(function (done) {
data = void 0;
Nock.disableNetConnect();
scope = Nock('https://api.xervo.io', {
reqheaders: Assign({}, HEADERS)
});
done();
});
afterEach(function (done) {
Nock.cleanAll();
Nock.enableNetConnect();
done();
});
describe('when submiting an object', function () {
beforeEach(function (done) {
data = { sent: true };
// eslint-disable-next-line no-magic-numbers
scope.post('/test', data).reply(201, { test: true });
done();
});
it('yields the response body', function (done) {
Client.post('/test', data, function (err, result) {
expect(err).to.not.exist();
expect(result).to.deep.equal({ test: true });
done();
});
});
});
describe('when submiting an array', function () {
beforeEach(function (done) {
data = [true];
// eslint-disable-next-line no-magic-numbers
scope.post('/test', data).reply(201, { test: true });
done();
});
it('yields the response body', function (done) {
Client.post('/test', data, function (err, result) {
expect(err).to.not.exist();
expect(result).to.deep.equal({ test: true });
done();
});
});
});
describe('when submiting bad data', function () {
it('yields an error', function (done) {
var badData = [1, 'invalid', null, void 0];
var steps = badData.map(function (invalid) {
return function (next) {
Client.post('/test', invalid, function (err) {
expect(err).to.exist();
expect(err.message).to.equal('data required');
next();
});
};
});
Series(steps, done);
});
});
describe('when submiting no data', function () {
it('yields an error', function (done) {
Client.post('/test', function (err) {
expect(err).to.exist();
expect(err.message).to.equal('data required');
done();
});
});
});
describe('when passed a token', function () {
beforeEach(function (done) {
data = { sent: true };
scope = Nock('https://api.xervo.io', {
reqheaders: Assign({}, HEADERS, {
'Authorization': 'Token 1234'
})
});
// eslint-disable-next-line no-magic-numbers
scope.post('/test', data).reply(201, { test: true });
done();
});
it('yields the response body', function (done) {
Client.post('/test', data, '1234', function (err, result) {
expect(err).to.not.exist();
expect(result).to.deep.equal({ test: true });
done();
});
});
});
});