From 6433d201fa345393ef97a7710ace395af2020ed3 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Tue, 3 May 2022 14:34:13 +0200 Subject: [PATCH] backend-tasks: Add test for parseDuration Signed-off-by: Johan Haals --- .../src/tasks/PluginTaskSchedulerImpl.test.ts | 13 +++++- .../src/tasks/PluginTaskSchedulerImpl.ts | 42 +++++++++---------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts index 92956298e5..16550b2d7d 100644 --- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts +++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts @@ -20,7 +20,10 @@ import { ConflictError, NotFoundError } from '@backstage/errors'; import { Duration } from 'luxon'; import { AbortSignal } from 'node-abort-controller'; import { migrateBackendTasks } from '../database/migrateBackendTasks'; -import { PluginTaskSchedulerImpl } from './PluginTaskSchedulerImpl'; +import { + parseDuration, + PluginTaskSchedulerImpl, +} from './PluginTaskSchedulerImpl'; jest.useFakeTimers(); @@ -294,4 +297,12 @@ describe('PluginTaskManagerImpl', () => { 60_000, ); }); + + describe('parseDuration', () => { + it('should parse durations', () => { + expect(parseDuration({ milliseconds: 5000 })).toEqual('PT5S'); + expect(parseDuration(Duration.fromMillis(5000))).toEqual('PT5S'); + expect(parseDuration({ cron: '1 * * * *' })).toEqual('1 * * * *'); + }); + }); }); diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts index 646107776c..e43d0c1be6 100644 --- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts +++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts @@ -49,20 +49,6 @@ export class PluginTaskSchedulerImpl implements PluginTaskScheduler { await TaskWorker.trigger(knex, id); } - private parseDuration( - frequency: TaskScheduleDefinition['frequency'], - ): string { - if ('cron' in frequency) { - return frequency.cron; - } - - if (Duration.isDuration(frequency)) { - return frequency.toISO(); - } - - return Duration.fromObject(frequency).toISO(); - } - async scheduleTask( task: TaskScheduleDefinition & TaskInvocationDefinition, ): Promise { @@ -76,11 +62,10 @@ export class PluginTaskSchedulerImpl implements PluginTaskScheduler { await worker.start( { version: 2, - cadence: this.parseDuration(task.frequency), + cadence: parseDuration(task.frequency), initialDelayDuration: - task.initialDelay && this.parseDuration(task.initialDelay), - timeoutAfterDuration: - task.timeout && this.parseDuration(task.timeout), + task.initialDelay && parseDuration(task.initialDelay), + timeoutAfterDuration: parseDuration(task.timeout), }, { signal: task.signal, @@ -92,11 +77,10 @@ export class PluginTaskSchedulerImpl implements PluginTaskScheduler { worker.start( { version: 2, - cadence: this.parseDuration(task.frequency), + cadence: parseDuration(task.frequency), initialDelayDuration: - task.initialDelay && this.parseDuration(task.initialDelay), - timeoutAfterDuration: - task.timeout && this.parseDuration(task.timeout), + task.initialDelay && parseDuration(task.initialDelay), + timeoutAfterDuration: parseDuration(task.timeout), }, { signal: task.signal, @@ -115,3 +99,17 @@ export class PluginTaskSchedulerImpl implements PluginTaskScheduler { }; } } + +export function parseDuration( + frequency: TaskScheduleDefinition['frequency'], +): string { + if ('cron' in frequency) { + return frequency.cron; + } + + if (Duration.isDuration(frequency)) { + return frequency.toISO(); + } + + return Duration.fromObject(frequency).toISO(); +}