You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					138 lines
				
				4.4 KiB
			
		
		
			
		
	
	
					138 lines
				
				4.4 KiB
			| 
											2 years ago
										 | 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); | ||
|  |         }); | ||
|  |     }); | ||
|  | }); |