Files
DeskClaw/tests/unit/token-usage-scan.test.ts
2026-03-13 13:57:49 +08:00

90 lines
2.5 KiB
TypeScript

import { mkdir, rm, writeFile } from 'fs/promises';
import { join } from 'path';
import { beforeEach, describe, expect, it, vi } from 'vitest';
const { testHome, testUserData } = vi.hoisted(() => {
const suffix = Math.random().toString(36).slice(2);
return {
testHome: `/tmp/clawx-token-usage-${suffix}`,
testUserData: `/tmp/clawx-token-usage-user-data-${suffix}`,
};
});
vi.mock('os', async () => {
const actual = await vi.importActual<typeof import('os')>('os');
const mocked = {
...actual,
homedir: () => testHome,
};
return {
...mocked,
default: mocked,
};
});
vi.mock('electron', () => ({
app: {
isPackaged: false,
getPath: () => testUserData,
getVersion: () => '0.0.0-test',
},
}));
describe('token usage session scan', () => {
beforeEach(async () => {
vi.resetModules();
vi.restoreAllMocks();
await rm(testHome, { recursive: true, force: true });
await rm(testUserData, { recursive: true, force: true });
});
it('includes transcripts from agent directories that exist on disk but are not configured', async () => {
const openclawDir = join(testHome, '.openclaw');
await mkdir(openclawDir, { recursive: true });
await writeFile(join(openclawDir, 'openclaw.json'), JSON.stringify({
agents: {
list: [
{ id: 'main', name: 'Main', default: true },
],
},
}, null, 2), 'utf8');
const diskOnlySessionsDir = join(openclawDir, 'agents', 'custom-custom25', 'sessions');
await mkdir(diskOnlySessionsDir, { recursive: true });
await writeFile(
join(diskOnlySessionsDir, 'f8e66f77-0125-4e2f-b750-9c4de01e8f5a.jsonl'),
[
JSON.stringify({
type: 'message',
timestamp: '2026-03-12T12:19:00.000Z',
message: {
role: 'assistant',
model: 'gpt-5.2-2025-12-11',
provider: 'openai',
usage: {
input: 17649,
output: 107,
total: 17756,
},
},
}),
].join('\n'),
'utf8',
);
const { getRecentTokenUsageHistory } = await import('@electron/utils/token-usage');
const entries = await getRecentTokenUsageHistory();
expect(entries).toEqual(
expect.arrayContaining([
expect.objectContaining({
agentId: 'custom-custom25',
sessionId: 'f8e66f77-0125-4e2f-b750-9c4de01e8f5a',
model: 'gpt-5.2-2025-12-11',
totalTokens: 17756,
}),
]),
);
});
});