const Config = require('../../config');
const stubLogger = require('../stub-logger');
+const stubDb = require('../stub-db');
const noExpectedException = 'did not get expected exception';
beforeEach(function () {
config = new Config('test');
promiseGiver = sinon.stub();
- worker = new Worker(stubLogger, promiseGiver, config);
+ worker = new Worker(stubLogger, stubDb, promiseGiver, config);
+ stubDb._reset();
});
afterEach(function () {
it('requires a promiseGiver function', function () {
try {
- worker = new Worker(stubLogger, undefined, config);
+ worker = new Worker(stubLogger, stubDb, undefined, config);
assert.fail('should require function argument');
} catch (e) {
assert(e instanceof TypeError);
describe('start', function () {
it('starts without polling', function () {
config.worker.pollingEnabled = false;
- worker = new Worker(stubLogger, promiseGiver, config);
+ worker = new Worker(stubLogger, stubDb, promiseGiver, config);
worker.start();
assert.strictEqual(worker.running, false);
});
it('starts with polling', function () {
config.worker.pollingEnabled = true;
- worker = new Worker(stubLogger, promiseGiver, config);
+ worker = new Worker(stubLogger, stubDb, promiseGiver, config);
sinon.stub(worker, '_recurr');
worker.start();
clearTimeout(worker.nextTimeout);
describe('stop', function () {
it('stops', function () {
- worker = new Worker(stubLogger, promiseGiver, config);
+ worker = new Worker(stubLogger, stubDb, promiseGiver, config);
worker.start();
worker.stop();
assert.strictEqual(worker.running, false);
}); // _handleWatchedList
describe('_getWork', function () {
+ let stubCtx;
+ beforeEach(function () {
+ stubCtx = {};
+ });
it('gets tasks', async function () {
const expected = [
Promise.resolve('first'),
Promise.resolve('second'),
];
worker.promiseGiver.resolves(expected);
- const result = await worker._getWork();
+ const result = await worker._getWork(stubCtx);
assert.deepStrictEqual(result, expected);
assert.strictEqual(worker.inFlight.length, expected.length);
});
Promise.reject('bad'),
Promise.resolve('second'),
];
- const result = await worker._getWork();
+ const result = await worker._getWork(stubCtx);
assert(!worker.promiseGiver.called);
assert.deepStrictEqual(result, []);
});
assert.strictEqual(worker._getWork.callCount, 1);
assert.strictEqual(worker._recurr.callCount, 1);
});
+ it('covers error', async function () {
+ const expected = new Error('blah');
+ stubDb.context.restore();
+ sinon.stub(stubDb, 'context').rejects(expected);
+ await worker.process();
+ assert.strictEqual(worker._getWork.callCount, 0);
+ assert.strictEqual(worker._recurr.callCount, 1);
+ });
+ it('covers double invocation', async function () {
+ const snooze = async (ms) => new Promise((resolve) => setTimeout(resolve, ms));
+
+ this.slow(300);
+ worker.inFlight = [
+ Worker.watchedPromise(snooze(100)),
+ ];
+
+ await Promise.all([worker.process(), worker.process()]);
+ assert.strictEqual(worker._getWork.callCount, 2);
+ assert.strictEqual(worker._recurr.callCount, 1);
+ });
}); // process
}); // Worker