From 3e4b37295595a830672b5117a67436e3eef2ad8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 9 Mar 2026 22:37:08 +0100 Subject: [PATCH] Implement cancelTask in MockSchedulerService with proper error types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 Signed-off-by: Fredrik Adelöw --- packages/backend-plugin-api/report.api.md | 1 + .../src/services/MockSchedulerService.ts | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index 504be97ec6..96d1a02c0a 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -643,6 +643,7 @@ export interface RootServiceFactoryOptions< // @public export interface SchedulerService { + cancelTask(id: string): Promise; createScheduledTaskRunner( schedule: SchedulerServiceTaskScheduleDefinition, ): SchedulerServiceTaskRunner; diff --git a/packages/backend-test-utils/src/services/MockSchedulerService.ts b/packages/backend-test-utils/src/services/MockSchedulerService.ts index e56ef11e20..a47859a96f 100644 --- a/packages/backend-test-utils/src/services/MockSchedulerService.ts +++ b/packages/backend-test-utils/src/services/MockSchedulerService.ts @@ -23,6 +23,7 @@ import { SchedulerServiceTaskRunner, SchedulerServiceTaskScheduleDefinition, } from '@backstage/backend-plugin-api'; +import { ConflictError, NotFoundError } from '@backstage/errors'; import { createDeferred, DeferredPromise } from '@backstage/types'; export class MockSchedulerService implements SchedulerService { @@ -95,14 +96,21 @@ export class MockSchedulerService implements SchedulerService { }); } - async cancelTask(_id: string): Promise { - // No-op in mock + async cancelTask(id: string): Promise { + const task = this.#tasks.get(id); + if (!task) { + throw new NotFoundError(`Task ${id} not found`); + } + if (!this.#runningTasks.has(id)) { + throw new ConflictError(`Task ${id} is not running`); + } + task.abortControllers.abort(); } async triggerTask(id: string): Promise { const task = this.#tasks.get(id); if (!task) { - throw new Error(`Task ${id} not found`); + throw new NotFoundError(`Task ${id} not found`); } if (this.#runningTasks.has(id)) { return;