cliche-scheduler
Version:
Job queue and scheduler for cliche.js
78 lines (57 loc) • 1.95 kB
JavaScript
const { expect } = require('chai');
const path = require('path');
const Scheduler = require('../');
describe('cliche-scheduler', () => {
it('should instantiate Scheduler', () => {
const scheduler = new Scheduler();
expect(scheduler).to.be.an.instanceof(Scheduler);
});
it('should instantiate Scheduler with a custom namespace', () => {
const scheduler = new Scheduler('custom');
expect(scheduler).to.be.an.instanceof(Scheduler);
});
it('should load jobs from directory', () => {
const scheduler = new Scheduler();
const jobsDir = path.join(__dirname, 'jobs');
scheduler.loadJobs(jobsDir);
expect(scheduler);
});
it('should schedule a job', done => {
const scheduler = new Scheduler();
const jobsDir = path.join(__dirname, 'jobs');
scheduler.loadJobs(jobsDir);
scheduler.schedule('testTask').then(job => {
expect(job).to.be.an('object');
expect(job.id).to.be.a('number');
job.on('complete', () => {
done();
});
});
});
it('should schedule a job with a delay', function (done) {
this.timeout(5000);
const scheduler = new Scheduler();
const jobsDir = path.join(__dirname, 'jobs');
scheduler.loadJobs(jobsDir);
scheduler.schedule('testTask', {}, 1000).then(job => {
expect(job).to.be.an('object');
expect(job.id).to.be.a('number');
job.on('complete', () => {
done();
});
});
});
it('should process jobs scheduled by another instance of the same namespace', done => {
const scheduler1 = new Scheduler('namespace');
const scheduler2 = new Scheduler('namespace');
const jobsDir = path.join(__dirname, 'jobs');
scheduler1.loadJobs(jobsDir);
scheduler2.schedule('testTask', {}).then(job => {
expect(job).to.be.an('object');
expect(job.id).to.be.a('number');
job.on('complete', () => {
done();
});
});
});
});