@xervo/api-util
Version:
wrapper to make API request simpler
115 lines (98 loc) • 3.06 kB
JavaScript
const Assign = require('lodash.assign');
const Code = require('code');
const Lab = require('lab');
const Nock = require('nock');
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.get', function () {
var scope;
beforeEach(function (done) {
Nock.disableNetConnect();
scope = Nock('https://api.xervo.io', {
reqheaders: Assign({}, HEADERS)
});
done();
});
afterEach(function (done) {
Nock.cleanAll();
Nock.enableNetConnect();
done();
});
describe('when requesting a simple endpoint', function () {
describe('when request status is 200', function () {
beforeEach(function (done) {
// eslint-disable-next-line no-magic-numbers
scope.get('/test').reply(200, { test: true });
done();
});
it('yields the response body', function (done) {
Client.get('/test', function (err, result) {
expect(err).to.not.exist();
expect(result).to.deep.equal({ test: true });
done();
});
});
});
describe('when request status is 400', function () {
beforeEach(function (done) {
// eslint-disable-next-line no-magic-numbers
scope.get('/test').reply(400, { error: true });
done();
});
it('yields the error', function (done) {
Client.get('/test', function (err) {
expect(err).to.exist();
// eslint-disable-next-line no-magic-numbers
expect(err.status).to.equal(400);
expect(err.response.body).to.deep.equal({ error: true });
done();
});
});
});
});
describe('when requesting an endpoint with query params', function () {
beforeEach(function (done) {
scope.get('/test')
.query({ with: 'params', other: 'data' })
// eslint-disable-next-line no-magic-numbers
.reply(200, { test: true });
done();
});
it('yields the response body', function (done) {
Client.get('/test?with=params&other=data', function (err, result) {
expect(err).to.not.exist();
expect(result).to.deep.equal({ test: true });
done();
});
});
});
describe('when passed a token', function () {
beforeEach(function (done) {
scope = Nock('https://api.xervo.io', {
reqheaders: Assign({}, HEADERS, {
'Authorization': 'Token 1234'
})
});
// eslint-disable-next-line no-magic-numbers
scope.get('/test').reply(200, { test: true });
done();
});
it('yields the response body', function (done) {
Client.get('/test', '1234', function (err, result) {
expect(err).to.not.exist();
expect(result).to.deep.equal({ test: true });
done();
});
});
});
});