Files
EJClaw/src/db-paired-turn-progress.test.ts
2026-04-29 20:04:47 +09:00

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',
});
});
});