This merges the `node-8` branch. The heavy lift was by @Daniel15 with refactoring from me and a patch by @RedSparr0w. * New API for registering services (#963) * Disable Node 6 tests on node-8 branch (#1423) * BaseService: Factor out methods _regex and _namedParamsForMatch (#1425) - Adjust test grouping - Rename data -> queryParams, text -> message * BaseService tests: Use Chai (#1450) * BaseService: make serviceData and badgeData explicit and declarative (#1451) * fix isValidStyle test (#1544) * Run tests in Node 9, not Node 6 (#1543)
100 lines
2.6 KiB
JavaScript
100 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
const { expect } = require('chai');
|
|
const sinon = require('sinon');
|
|
|
|
const BaseService = require('./base');
|
|
|
|
require('../lib/register-chai-plugins.spec');
|
|
|
|
class DummyService extends BaseService {
|
|
async handle({someArg}) {
|
|
return {
|
|
message: 'Hello ' + someArg,
|
|
};
|
|
}
|
|
|
|
static get category() { return 'cat'; }
|
|
static get uri() {
|
|
return {
|
|
format: '/foo/([^/]+)',
|
|
capture: ['someArg']
|
|
};
|
|
}
|
|
}
|
|
|
|
describe('BaseService', () => {
|
|
describe('_makeBadgeData', function () {
|
|
describe('Overrides', function () {
|
|
it('overrides the label', function () {
|
|
const badgeData = DummyService._makeBadgeData({ label: 'purr count' }, { label: 'purrs' });
|
|
expect(badgeData.text).to.deep.equal(['purr count', 'n/a']);
|
|
});
|
|
});
|
|
|
|
describe('Service data', function () {
|
|
it('applies the service message', function () {
|
|
const badgeData = DummyService._makeBadgeData({}, { message: '10k' });
|
|
expect(badgeData.text).to.deep.equal(['cat', '10k']);
|
|
});
|
|
});
|
|
|
|
describe('Defaults', function () {
|
|
it('uses the default label', function () {
|
|
const badgeData = DummyService._makeBadgeData({}, {});
|
|
expect(badgeData.text).to.deep.equal(['cat', 'n/a']);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('ScoutCamp integration', function () {
|
|
const expectedRouteRegex = /^\/foo\/([^/]+).(svg|png|gif|jpg|json)$/;
|
|
|
|
let mockCamp;
|
|
let mockHandleRequest;
|
|
|
|
beforeEach(() => {
|
|
mockCamp = {
|
|
route: sinon.spy(),
|
|
};
|
|
mockHandleRequest = sinon.spy();
|
|
DummyService.register(mockCamp, mockHandleRequest);
|
|
});
|
|
|
|
it('registers the service', () => {
|
|
expect(mockCamp.route).to.have.been.calledOnce;
|
|
expect(mockCamp.route).to.have.been.calledWith(expectedRouteRegex);
|
|
});
|
|
|
|
it('handles the request', async () => {
|
|
expect(mockHandleRequest).to.have.been.calledOnce;
|
|
const requestHandler = mockHandleRequest.getCall(0).args[0];
|
|
|
|
const mockSendBadge = sinon.spy();
|
|
const mockRequest = {
|
|
asPromise: sinon.spy(),
|
|
};
|
|
await requestHandler(
|
|
/*data*/ {},
|
|
/*match*/ '/foo/bar.svg'.match(expectedRouteRegex),
|
|
mockSendBadge,
|
|
mockRequest
|
|
);
|
|
|
|
expect(mockSendBadge).to.have.been.calledOnce;
|
|
expect(mockSendBadge).to.have.been.calledWith(
|
|
/*format*/ 'svg',
|
|
{
|
|
text: ['cat', 'Hello bar'],
|
|
colorscheme: 'lightgrey',
|
|
template: undefined,
|
|
logo: undefined,
|
|
logoWidth: NaN,
|
|
links: [],
|
|
colorA: undefined,
|
|
}
|
|
);
|
|
});
|
|
});
|
|
});
|