Files
EJClaw/src/compact-refresh.test.ts
2026-05-25 22:57:52 +09:00

105 lines
2.5 KiB
TypeScript

import fs from 'fs';
import { beforeEach, describe, expect, it, vi } from 'vitest';
vi.mock('./config.js', () => ({
DATA_DIR: '/tmp/ejclaw-compact-refresh-test',
}));
import {
clearCompactRefreshIfUnchanged,
markCompactRefreshNeeded,
maybeApplyCompactRefresh,
readCompactRefreshFlag,
} from './compact-refresh.js';
const refreshDir = '/tmp/ejclaw-compact-refresh-test/compact-refresh';
describe('compact-refresh', () => {
beforeEach(() => {
fs.rmSync(refreshDir, { recursive: true, force: true });
});
it('marks and reads compact refresh flags by session folder', () => {
const flag = markCompactRefreshNeeded({
sessionFolder: 'room:reviewer',
sessionId: 'session-1',
trigger: 'auto',
});
expect(readCompactRefreshFlag('room:reviewer')).toMatchObject({
sessionFolder: 'room:reviewer',
sessionId: 'session-1',
trigger: 'auto',
compactedAt: flag.compactedAt,
});
});
it('applies a one-shot compact refresh only for owner and reviewer roles', () => {
const flag = markCompactRefreshNeeded({
sessionFolder: 'room',
sessionId: 'session-1',
});
const applied = maybeApplyCompactRefresh({
sessionFolder: 'room',
sessionId: 'session-1',
role: 'owner',
prompt: 'continue task',
});
expect(applied?.flag).toEqual(flag);
expect(applied?.prompt).toContain('EJClaw compact refresh');
expect(applied?.prompt).toContain('continue task');
clearCompactRefreshIfUnchanged({
sessionFolder: 'room',
flag,
});
expect(readCompactRefreshFlag('room')).toBeNull();
});
it('does not apply to arbiter, compact commands, fresh sessions, or stale sessions', () => {
markCompactRefreshNeeded({
sessionFolder: 'room',
sessionId: 'session-1',
});
expect(
maybeApplyCompactRefresh({
sessionFolder: 'room',
sessionId: 'session-1',
role: 'arbiter',
prompt: 'judge',
}),
).toBeNull();
expect(
maybeApplyCompactRefresh({
sessionFolder: 'room',
sessionId: 'session-1',
role: 'owner',
prompt: '/compact',
}),
).toBeNull();
expect(
maybeApplyCompactRefresh({
sessionFolder: 'room',
role: 'owner',
prompt: 'fresh',
}),
).toBeNull();
expect(
maybeApplyCompactRefresh({
sessionFolder: 'room',
sessionId: 'different-session',
role: 'owner',
prompt: 'stale',
}),
).toBeNull();
expect(readCompactRefreshFlag('room')).toBeNull();
});
});