From b044e783e73a499dbd7532a5d489a782d3d021da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Mon, 12 Aug 2024 11:03:51 +0200 Subject: [PATCH] fix(core): Account for cancelling an execution with no workers available (#10343) --- .../scaling/__tests__/scaling.service.test.ts | 20 +++++++++++++++++++ packages/cli/src/scaling/scaling.service.ts | 4 +++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/scaling/__tests__/scaling.service.test.ts b/packages/cli/src/scaling/__tests__/scaling.service.test.ts index d0cb038884f64..0a798fae3e8a6 100644 --- a/packages/cli/src/scaling/__tests__/scaling.service.test.ts +++ b/packages/cli/src/scaling/__tests__/scaling.service.test.ts @@ -190,6 +190,26 @@ describe('ScalingService', () => { expect(jobs).toHaveLength(1); expect(jobs.at(0)?.id).toBe('123'); }); + + it('should filter out `null` in Redis response', async () => { + /** + * Arrange + */ + const scalingService = new ScalingService(mock(), mock(), mock()); + await scalingService.setupQueue(); + // @ts-expect-error - Untyped but possible Redis response + queue.getJobs.mockResolvedValue([mock(), null]); + + /** + * Act + */ + const jobs = await scalingService.findJobsByStatus(['waiting']); + + /** + * Assert + */ + expect(jobs).toHaveLength(1); + }); }); describe('stopJob', () => { diff --git a/packages/cli/src/scaling/scaling.service.ts b/packages/cli/src/scaling/scaling.service.ts index 73b072af6c888..f26feebc58fd5 100644 --- a/packages/cli/src/scaling/scaling.service.ts +++ b/packages/cli/src/scaling/scaling.service.ts @@ -88,7 +88,9 @@ export class ScalingService { } async findJobsByStatus(statuses: JobStatus[]) { - return await this.queue.getJobs(statuses); + const jobs = await this.queue.getJobs(statuses); + + return jobs.filter((job) => job !== null); } async stopJob(job: Job) {