Files
shields/services/base.spec.js
Paul Melnikow 2d651533aa New API for registering services: #963 #1423 #1425 #1450 #1451 #1544 #1543
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)
2018-03-11 17:53:01 -07:00

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,
}
);
});
});
});