From a70ef41c1ccdfa38d6ce086e294b2e0bf62d9fa6 Mon Sep 17 00:00:00 2001 From: Junyi Date: Sat, 27 Jul 2024 14:35:17 +0800 Subject: [PATCH] fix(plugin-workflow): fix schedule event on date field (#4953) --- .../triggers/schedule/mode-date-field.test.ts | 25 +++++++++++++++++++ .../DateFieldScheduleTrigger.ts | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/plugins/@nocobase/plugin-workflow/src/server/__tests__/triggers/schedule/mode-date-field.test.ts b/packages/plugins/@nocobase/plugin-workflow/src/server/__tests__/triggers/schedule/mode-date-field.test.ts index b8e1170a2a..b4a052111d 100644 --- a/packages/plugins/@nocobase/plugin-workflow/src/server/__tests__/triggers/schedule/mode-date-field.test.ts +++ b/packages/plugins/@nocobase/plugin-workflow/src/server/__tests__/triggers/schedule/mode-date-field.test.ts @@ -377,5 +377,30 @@ describe('workflow > triggers > schedule > date field mode', () => { const e2c = await workflow.countExecutions(); expect(e2c).toBe(2); }); + + it('empty endsOn as no end', async () => { + const workflow = await WorkflowModel.create({ + enabled: true, + type: 'schedule', + config: { + mode: 1, + collection: 'posts', + startsOn: { + field: 'createdAt', + }, + repeat: 1000, + endsOn: {}, + }, + }); + + await sleepToEvenSecond(); + + const post = await PostRepo.create({ values: { title: 't1' } }); + + await sleep(1700); + + const e1c = await workflow.countExecutions(); + expect(e1c).toBe(2); + }); }); }); diff --git a/packages/plugins/@nocobase/plugin-workflow/src/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.ts b/packages/plugins/@nocobase/plugin-workflow/src/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.ts index d59c4229d1..5c60ccbb5b 100644 --- a/packages/plugins/@nocobase/plugin-workflow/src/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.ts +++ b/packages/plugins/@nocobase/plugin-workflow/src/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.ts @@ -54,7 +54,7 @@ function getDataOptionTime(record, on, dir = 1) { } case 'object': { const { field, offset = 0, unit = 1000 } = on; - if (!record.get(field)) { + if (!field || !record.get(field)) { return null; } const second = new Date(record.get(field).getTime());