From 56edbd5897eb013ad7e433212adab71397319b94 Mon Sep 17 00:00:00 2001 From: Hexagon Date: Fri, 3 Mar 2023 01:29:30 +0100 Subject: [PATCH] Adjust croner integration to 6.x. Add version in README.md. --- README.md | 2 +- lib/engines/cron/CronJob.ts | 11 ++++------- package.json | 2 +- test/CronJob.spec.ts | 33 +++++++++++++++++++++------------ 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 9f1623d..b10c951 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ You can use CronJob instances for handling Cron-style scheduling: scheduler.addCronJob(job) ``` -Note that you need to install "croner" library for this to work. Run `npm i croner` in order to install this dependency. +Note that you need to install "croner" library for this to work. Run `npm i croner@6` in order to install this dependency. ## Usage in clustered environments diff --git a/lib/engines/cron/CronJob.ts b/lib/engines/cron/CronJob.ts index 74da3da..36bdb93 100644 --- a/lib/engines/cron/CronJob.ts +++ b/lib/engines/cron/CronJob.ts @@ -19,7 +19,7 @@ export type CronSchedule = { } export type Cron = { - running(): boolean + isRunning(): boolean stop(): void } @@ -39,7 +39,7 @@ export class CronJob extends Job { /* istanbul ignore next */ getStatus(): JobStatus { - return this.cronInstance?.running() ? JobStatus.RUNNING : JobStatus.STOPPED + return this.cronInstance?.isRunning() ? JobStatus.RUNNING : JobStatus.STOPPED } start(): void { @@ -56,12 +56,9 @@ export class CronJob extends Job { this.schedule.cronExpression, { timezone: this.schedule.timezone, + protect: this.preventOverrun }, - () => { - if (!this.task.isExecuting || !this.preventOverrun) { - this.task.execute() - } - } + async () => await this.task.execute() ) } diff --git a/package.json b/package.json index 4540d7b..aeab895 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@types/node": "^18.11.17", "@typescript-eslint/eslint-plugin": "^5.47.0", "@typescript-eslint/parser": "^5.47.0", - "croner": "^5.3.5", + "croner": "^6.0.2", "eslint": "^8.30.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", diff --git a/test/CronJob.spec.ts b/test/CronJob.spec.ts index 67dd140..cce1fcb 100644 --- a/test/CronJob.spec.ts +++ b/test/CronJob.spec.ts @@ -46,7 +46,7 @@ describe('ToadScheduler', () => { expect(job.getStatus()).toBe('stopped') }) - it('correctly processes CronJob', () => { + it('correctly processes CronJob', async () => { let counter = 0 const scheduler = new ToadScheduler() const task = new Task('simple task', () => { @@ -63,12 +63,16 @@ describe('ToadScheduler', () => { resetTime() expect(counter).toBe(0) advanceTimersByTime(19999) + await Promise.resolve(undefined) expect(counter).toBe(0) advanceTimersByTime(1) + await Promise.resolve(undefined) expect(counter).toBe(1) advanceTimersByTime(19999) + await Promise.resolve(undefined) expect(counter).toBe(1) advanceTimersByTime(1) + await Promise.resolve(undefined) expect(counter).toBe(2) scheduler.stop() @@ -126,7 +130,7 @@ describe('ToadScheduler', () => { it('allows enabling CronJob execution overrun', async () => { let counter = 0 const scheduler = new ToadScheduler() - const task = new AsyncTask('simple task', () => { + const task = new AsyncTask('simple task', async () => { counter++ advanceTimersByTime(5000) return Promise.resolve(undefined) @@ -152,13 +156,13 @@ describe('ToadScheduler', () => { await Promise.resolve() // this allows promises to play nice with mocked timers await Promise.resolve() await Promise.resolve() - expect(counter).toBe(4) + expect(counter).toBe(3) advanceTimersByTime(1000) advanceTimersByTime(1000) advanceTimersByTime(1000) advanceTimersByTime(1000) advanceTimersByTime(1000) - expect(counter).toBe(9) + expect(counter).toBe(8) await Promise.resolve() await Promise.resolve() await Promise.resolve() @@ -168,14 +172,14 @@ describe('ToadScheduler', () => { advanceTimersByTime(1000) advanceTimersByTime(1000) await Promise.resolve() - expect(counter).toBe(14) + expect(counter).toBe(13) scheduler.stop() }) it('allows preventing CronJob execution overrun with async tasks', async () => { let counter = 0 const scheduler = new ToadScheduler() - const task = new AsyncTask('simple task', () => { + const task = new AsyncTask('simple task', async () => { counter++ advanceTimersByTime(5000) return Promise.resolve(undefined) @@ -199,10 +203,11 @@ describe('ToadScheduler', () => { advanceTimersByTime(1) await Promise.resolve() expect(counter).toBe(1) + advanceTimersByTime(2000) await Promise.resolve() - advanceTimersByTime(999) expect(counter).toBe(1) - advanceTimersByTime(1) + advanceTimersByTime(6000) + await Promise.resolve() expect(counter).toBe(2) scheduler.stop() }) @@ -214,7 +219,7 @@ describe('ToadScheduler', () => { let result3 = 0 const scheduler = new ToadScheduler() - const task = new AsyncTask('simple task', () => { + const task = new AsyncTask('simple task', async () => { counter++ advanceTimersByTime(5000) const promise1 = Promise.resolve().then(() => { @@ -255,11 +260,11 @@ describe('ToadScheduler', () => { expect(result3).toBe(1) expect(counter).toBe(1) await Promise.resolve() - advanceTimersByTime(999) + advanceTimersByTime(1999) expect(counter).toBe(1) await Promise.resolve() await Promise.resolve() - advanceTimersByTime(1) + advanceTimersByTime(2000) await Promise.resolve() expect(counter).toBe(2) scheduler.stop() @@ -268,7 +273,7 @@ describe('ToadScheduler', () => { expect(result3).toBe(2) }) - it('correctly handles adding job twice', () => { + it('correctly handles adding job twice', async () => { let counter = 0 const scheduler = new ToadScheduler() const task = new Task('simple task', () => { @@ -286,12 +291,16 @@ describe('ToadScheduler', () => { resetTime() expect(counter).toBe(0) advanceTimersByTime(19999) + await Promise.resolve() expect(counter).toBe(0) advanceTimersByTime(1) + await Promise.resolve() expect(counter).toBe(2) advanceTimersByTime(19999) + await Promise.resolve() expect(counter).toBe(2) advanceTimersByTime(1) + await Promise.resolve() expect(counter).toBe(4) scheduler.stop()