138 lines
No EOL
4.4 KiB
JavaScript
138 lines
No EOL
4.4 KiB
JavaScript
const { assert } = require('chai');
|
|
const sinon = require('sinon');
|
|
const cron = require('../src/node-cron');
|
|
|
|
describe('node-cron', () => {
|
|
beforeEach(() => {
|
|
this.clock = sinon.useFakeTimers(new Date(2018, 0, 1, 0, 0, 0, 0));
|
|
});
|
|
|
|
afterEach(() => {
|
|
this.clock.restore();
|
|
});
|
|
|
|
describe('schedule', () => {
|
|
it('should schedule a task', () => {
|
|
let executed = 0;
|
|
cron.schedule('* * * * * *', () => {
|
|
executed += 1;
|
|
});
|
|
|
|
this.clock.tick(2000);
|
|
|
|
assert.equal(2, executed);
|
|
});
|
|
|
|
it('should schedule a task with America/Sao_Paulo timezone', (done) => {
|
|
let startDate = new Date('Thu, 20 Sep 2018 00:00:00.000Z');
|
|
this.clock.restore();
|
|
this.clock = sinon.useFakeTimers(startDate);
|
|
cron.schedule('* * * * * *', (date) => {
|
|
assert.equal(19, date.getDate());
|
|
assert.equal(8, date.getMonth());
|
|
assert.equal(2018, date.getFullYear());
|
|
assert.equal(21, date.getHours());
|
|
assert.equal(0, date.getMinutes());
|
|
assert.equal(1, date.getSeconds());
|
|
done();
|
|
}, {
|
|
timezone: 'America/Sao_Paulo'
|
|
});
|
|
this.clock.tick(1000);
|
|
});
|
|
|
|
it('should schedule a task with Europe/Rome timezone', (done) => {
|
|
let startDate = new Date('Thu, 20 Sep 2018 00:00:00.000Z');
|
|
this.clock.restore();
|
|
this.clock = sinon.useFakeTimers(startDate);
|
|
cron.schedule('* * * * * *', (date) => {
|
|
assert.equal(20, date.getDate());
|
|
assert.equal(8, date.getMonth());
|
|
assert.equal(2018, date.getFullYear());
|
|
assert.equal(2, date.getHours());
|
|
assert.equal(0, date.getMinutes());
|
|
assert.equal(1, date.getSeconds());
|
|
done();
|
|
}, {
|
|
timezone: 'Europe/Rome'
|
|
});
|
|
this.clock.tick(1000);
|
|
});
|
|
|
|
it('should schedule a task stoped', () => {
|
|
let executed = 0;
|
|
cron.schedule('* * * * * *', () => {
|
|
executed += 1;
|
|
}, { scheduled: false });
|
|
|
|
this.clock.tick(2000);
|
|
|
|
assert.equal(0, executed);
|
|
});
|
|
|
|
it('should start a stoped task', () => {
|
|
let executed = 0;
|
|
let scheduledTask = cron.schedule('* * * * * *', () => {
|
|
executed += 1;
|
|
}, { scheduled: false });
|
|
|
|
this.clock.tick(2000);
|
|
assert.equal(0, executed);
|
|
scheduledTask.start();
|
|
this.clock.tick(2000);
|
|
assert.equal(2, executed);
|
|
});
|
|
|
|
it('should recover missed executions', (done) => {
|
|
let executed = 0;
|
|
this.clock.restore();
|
|
let scheduledTask = cron.schedule('* * * * * *', () => {
|
|
executed += 1;
|
|
}, { recoverMissedExecutions: true });
|
|
|
|
let wait = true;
|
|
let startedAt = new Date();
|
|
|
|
while(wait){
|
|
if((new Date().getTime() - startedAt.getTime()) > 1000){
|
|
wait = false;
|
|
}
|
|
}
|
|
|
|
setTimeout(() => {
|
|
scheduledTask.stop();
|
|
assert.equal(2, executed);
|
|
done();
|
|
}, 1000);
|
|
}).timeout(4000);
|
|
|
|
it('should schedule a background task', () => {
|
|
let task = cron.schedule('* * * * * *', './test/assets/dummy-task.js');
|
|
assert.isNotNull(task);
|
|
assert.isDefined(task);
|
|
assert.isTrue(task.isRunning());
|
|
task.stop();
|
|
});
|
|
});
|
|
|
|
describe('validate', () => {
|
|
it('should validate a pattern', () => {
|
|
assert.isTrue(cron.validate('* * * * * *'));
|
|
});
|
|
|
|
it('should fail with a invalid pattern', () => {
|
|
assert.isFalse(cron.validate('62 * * * * *'));
|
|
});
|
|
});
|
|
|
|
describe('getTasks', () => {
|
|
beforeEach(() => {
|
|
global.scheduledTasks = new Map();
|
|
});
|
|
|
|
it('should store a task', () => {
|
|
cron.schedule('* * * * *', () => {});
|
|
assert.lengthOf(cron.getTasks(), 1);
|
|
});
|
|
});
|
|
}); |