| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- 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 = [];
- });
-
- it('should store a task', () => {
- cron.schedule('* * * * *', () => {});
- assert.lengthOf(cron.getTasks(), 1);
- });
- });
- });
|