forked from boos/BoosAPI
test: harden background task completion waits (#382)
This commit is contained in:
@@ -3,6 +3,7 @@ import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vites
|
||||
import { mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { waitForBackgroundTaskToReachTerminalState } from '../../test-fixtures/backgroundTaskTestUtils.js';
|
||||
|
||||
const verifyTokenMock = vi.fn();
|
||||
const getApiTokensMock = vi.fn();
|
||||
@@ -159,17 +160,16 @@ describe('accounts background initialization', () => {
|
||||
|
||||
releaseTokens?.([{ name: 'default', value: 'sk-demo' }]);
|
||||
|
||||
for (let attempt = 0; attempt < 20; attempt += 1) {
|
||||
const task = getBackgroundTask?.(body.jobId!);
|
||||
if (task?.status === 'succeeded') break;
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
}
|
||||
const task = await waitForBackgroundTaskToReachTerminalState(
|
||||
(taskId) => getBackgroundTask?.(taskId) ?? null,
|
||||
body.jobId!,
|
||||
);
|
||||
|
||||
expect(syncTokensFromUpstreamMock).toHaveBeenCalledTimes(1);
|
||||
expect(refreshBalanceMock).toHaveBeenCalledTimes(1);
|
||||
expect(refreshModelsForAccountMock).toHaveBeenCalledTimes(1);
|
||||
expect(rebuildTokenRoutesFromAvailabilityMock).toHaveBeenCalledTimes(1);
|
||||
expect(getBackgroundTask?.(body.jobId!)).toMatchObject({ status: 'succeeded' });
|
||||
expect(task).toMatchObject({ status: 'succeeded' });
|
||||
} finally {
|
||||
releaseTokens?.([]);
|
||||
await responsePromise.catch(() => undefined);
|
||||
|
||||
@@ -3,6 +3,7 @@ import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vites
|
||||
import { mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { waitForBackgroundTaskToReachTerminalState } from '../../test-fixtures/backgroundTaskTestUtils.js';
|
||||
|
||||
type DbModule = typeof import('../../db/index.js');
|
||||
type BackgroundTaskModule = typeof import('../../services/backgroundTaskService.js');
|
||||
@@ -163,13 +164,8 @@ describe('POST /api/routes/decision/refresh', () => {
|
||||
expect(body.jobId.length).toBeGreaterThan(10);
|
||||
expect(body.status).toBe('pending');
|
||||
|
||||
for (let attempt = 0; attempt < 200; attempt += 1) {
|
||||
const task = getBackgroundTask(body.jobId);
|
||||
if (task?.status === 'succeeded') break;
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
}
|
||||
|
||||
expect(getBackgroundTask(body.jobId)).toMatchObject({ status: 'succeeded' });
|
||||
const task = await waitForBackgroundTaskToReachTerminalState(getBackgroundTask, body.jobId);
|
||||
expect(task).toMatchObject({ status: 'succeeded' });
|
||||
|
||||
const routesResponse = await app.inject({
|
||||
method: 'GET',
|
||||
|
||||
@@ -4,6 +4,7 @@ import { mkdtempSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { waitForBackgroundTaskToReachTerminalState } from '../../test-fixtures/backgroundTaskTestUtils.js';
|
||||
|
||||
const {
|
||||
fetchLatestStableGitHubReleaseMock,
|
||||
@@ -801,11 +802,11 @@ describe('update center routes', () => {
|
||||
|
||||
const deployBody = deployResponse.json() as { task: { id: string } };
|
||||
|
||||
for (let attempt = 0; attempt < 20; attempt += 1) {
|
||||
const task = getBackgroundTask?.(deployBody.task.id);
|
||||
if (task?.status === 'succeeded') break;
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
}
|
||||
const task = await waitForBackgroundTaskToReachTerminalState(
|
||||
(taskId) => getBackgroundTask?.(taskId) ?? null,
|
||||
deployBody.task.id,
|
||||
);
|
||||
expect(task).toMatchObject({ status: 'succeeded' });
|
||||
|
||||
expect(getBackgroundTask?.(deployBody.task.id)?.logs).toEqual(expect.arrayContaining([
|
||||
expect.objectContaining({ message: 'Resolving target version' }),
|
||||
|
||||
Reference in New Issue
Block a user