Ghost/ghost/job-manager/test/job-manager.test.js

71 lines
2.1 KiB
JavaScript
Raw Normal View History

2020-11-05 06:39:51 +03:00
// Switch these lines once there are useful utils
// const testUtils = require('./utils');
require('./utils');
const sinon = require('sinon');
const delay = require('delay');
2020-11-05 06:39:51 +03:00
const JobManager = require('../index');
2020-11-05 06:39:51 +03:00
describe('Job Manager', function () {
let logging;
beforeEach(function () {
logging = {
info: sinon.stub(),
error: sinon.stub()
};
});
2020-11-05 06:39:51 +03:00
it('public interface', function () {
const jobManager = new JobManager(logging);
2020-11-05 06:39:51 +03:00
should.exist(jobManager.addJob);
should.exist(jobManager.scheduleJob);
});
describe('Add a Job', function () {
it('adds a job to a queue', async function () {
const spy = sinon.spy();
const jobManager = new JobManager(logging);
jobManager.addJob(spy, 'test data');
should(jobManager.queue.idle()).be.false();
// give time to execute the job
await delay(1);
should(jobManager.queue.idle()).be.true();
should(spy.called).be.true();
should(spy.args[0][0]).equal('test data');
});
it('handles failed job gracefully', async function () {
const spy = sinon.stub().throws();
const jobManager = new JobManager(logging);
jobManager.addJob(spy, 'test data');
should(jobManager.queue.idle()).be.false();
// give time to execute the job
await delay(1);
should(jobManager.queue.idle()).be.true();
should(spy.called).be.true();
should(spy.args[0][0]).equal('test data');
should(logging.error.called).be.true();
});
});
describe('Schedule Job', function () {
it('fails to run for invalid scheduling expression', function () {
const jobManager = new JobManager(logging);
try {
jobManager.scheduleJob('invalid expression', () => {}, {});
} catch (err) {
err.message.should.equal('Invalid schedule format');
}
});
2020-11-05 06:39:51 +03:00
});
});