63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import { beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
_initTestDatabase,
|
|
getLatestPairedTurnForTask,
|
|
markPairedTurnRunning,
|
|
reservePairedTurnReservation,
|
|
updatePairedTurnProgressText,
|
|
} from './db.js';
|
|
import { CODEX_MAIN_SERVICE_ID } from './config.js';
|
|
import { buildPairedTurnIdentity } from './paired-turn-identity.js';
|
|
|
|
beforeEach(() => {
|
|
_initTestDatabase();
|
|
});
|
|
|
|
describe('paired turn progress activity', () => {
|
|
it('selects the latest paired turn by progress activity timestamp', async () => {
|
|
const taskId = 'progress-latest-task';
|
|
const activeTurn = buildPairedTurnIdentity({
|
|
taskId,
|
|
taskUpdatedAt: '2026-04-10T00:00:00.000Z',
|
|
intentKind: 'owner-follow-up',
|
|
role: 'owner',
|
|
});
|
|
const queuedTurn = buildPairedTurnIdentity({
|
|
taskId,
|
|
taskUpdatedAt: '2026-04-10T00:01:00.000Z',
|
|
intentKind: 'owner-follow-up',
|
|
role: 'owner',
|
|
});
|
|
|
|
markPairedTurnRunning({
|
|
turnIdentity: activeTurn,
|
|
executorServiceId: CODEX_MAIN_SERVICE_ID,
|
|
executorAgentType: 'codex',
|
|
runId: 'run-progress-active',
|
|
});
|
|
expect(
|
|
reservePairedTurnReservation({
|
|
chatJid: 'dc:ops',
|
|
taskId,
|
|
taskStatus: 'active',
|
|
roundTripCount: 1,
|
|
taskUpdatedAt: queuedTurn.taskUpdatedAt,
|
|
intentKind: queuedTurn.intentKind,
|
|
runId: 'run-queued-empty',
|
|
}),
|
|
).toBe(true);
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
updatePairedTurnProgressText(
|
|
activeTurn.turnId,
|
|
'checking dashboard parity',
|
|
);
|
|
|
|
expect(getLatestPairedTurnForTask(taskId)).toMatchObject({
|
|
turn_id: activeTurn.turnId,
|
|
progress_text: 'checking dashboard parity',
|
|
});
|
|
});
|
|
});
|