Merge pull request #33122 from johnmcollier/filterstatustasks

feat(scaffolder): Allow filtering by status in scaffolderService.listTasks
This commit is contained in:
Fredrik Adelöw
2026-04-22 10:27:36 +02:00
committed by GitHub
8 changed files with 190 additions and 3 deletions
@@ -202,4 +202,61 @@ describe('scaffolderServiceRef', () => {
expect(result).toEqual({ items: [], totalItems: 0 });
});
it('should serialize a single status as a repeated query param for listTasks', async () => {
expect.assertions(1);
server.use(
rest.get('*/api/scaffolder/v2/tasks', (req, res, ctx) => {
expect(req.url.searchParams.getAll('status')).toEqual(['completed']);
return res(ctx.json({ tasks: [], totalTasks: 0 }));
}),
);
const tester = ServiceFactoryTester.from(
createServiceFactory({
service: createServiceRef<void>({ id: 'unused-dummy' }),
deps: {},
factory() {},
}),
{ dependencies: [mockServices.discovery.factory()] },
);
const scaffolder = await tester.getService(scaffolderServiceRef);
await scaffolder.listTasks(
{ status: 'completed' },
{ credentials: mockCredentials.user() },
);
});
it('should serialize multiple statuses as repeated query params for listTasks', async () => {
expect.assertions(1);
server.use(
rest.get('*/api/scaffolder/v2/tasks', (req, res, ctx) => {
expect(req.url.searchParams.getAll('status')).toEqual([
'completed',
'failed',
]);
return res(ctx.json({ tasks: [], totalTasks: 0 }));
}),
);
const tester = ServiceFactoryTester.from(
createServiceFactory({
service: createServiceRef<void>({ id: 'unused-dummy' }),
deps: {},
factory() {},
}),
{ dependencies: [mockServices.discovery.factory()] },
);
const scaffolder = await tester.getService(scaffolderServiceRef);
await scaffolder.listTasks(
{ status: ['completed', 'failed'] },
{ credentials: mockCredentials.user() },
);
});
});
@@ -83,6 +83,7 @@ export interface ScaffolderService {
createdBy?: string;
limit?: number;
offset?: number;
status?: ScaffolderTaskStatus | ScaffolderTaskStatus[];
},
options: ScaffolderServiceRequestOptions,
): Promise<{ items: ScaffolderTask[]; totalItems: number }>;
@@ -185,6 +186,7 @@ class DefaultScaffolderService implements ScaffolderService {
createdBy?: string;
limit?: number;
offset?: number;
status?: ScaffolderTaskStatus | ScaffolderTaskStatus[];
},
options: ScaffolderServiceRequestOptions,
): Promise<{ items: ScaffolderTask[]; totalItems: number }> {
@@ -201,6 +203,11 @@ class DefaultScaffolderService implements ScaffolderService {
if (request.offset !== undefined) {
params.set('offset', String(request.offset));
}
if (request.status !== undefined) {
for (const s of [request.status].flat()) {
params.append('status', s);
}
}
const query = params.toString();
const url = `${baseUrl}/v2/tasks${query ? `?${query}` : ''}`;