43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { filterClaudeTraceEvents, readClaudeTraceEvents } from "../src/ui/claude-trace-store.js";
|
|
|
|
test("readClaudeTraceEvents parses and sorts ndjson records", async () => {
|
|
const workspace = await mkdtemp(join(tmpdir(), "claude-trace-store-"));
|
|
const logPath = join(workspace, "claude-trace.ndjson");
|
|
await writeFile(
|
|
logPath,
|
|
[
|
|
'{"timestamp":"2026-02-24T17:27:05.000Z","message":"later","sessionId":"s1"}',
|
|
'not-json',
|
|
'{"timestamp":"2026-02-24T17:26:00.000Z","message":"earlier","sessionId":"s1"}',
|
|
'{"message":"missing timestamp"}',
|
|
].join("\n"),
|
|
"utf8",
|
|
);
|
|
|
|
const events = await readClaudeTraceEvents(logPath);
|
|
assert.equal(events.length, 2);
|
|
assert.equal(events[0]?.message, "earlier");
|
|
assert.equal(events[1]?.message, "later");
|
|
});
|
|
|
|
test("filterClaudeTraceEvents filters by session and limit", () => {
|
|
const events = [
|
|
{ timestamp: "2026-02-24T17:00:00.000Z", message: "a", sessionId: "s1" },
|
|
{ timestamp: "2026-02-24T17:01:00.000Z", message: "b", sessionId: "s2" },
|
|
{ timestamp: "2026-02-24T17:02:00.000Z", message: "c", sessionId: "s1" },
|
|
];
|
|
|
|
const filtered = filterClaudeTraceEvents(events, {
|
|
sessionId: "s1",
|
|
limit: 1,
|
|
});
|
|
|
|
assert.equal(filtered.length, 1);
|
|
assert.equal(filtered[0]?.message, "c");
|
|
});
|