Files
fusion/packages/engine/src/__tests__/executor-token-usage.test.ts
Fusion 7490c3bd0c fix(FN-4389): complete missing token usage parity and dashboard split
Fusion-Task-Id: FN-4389
Fusion-Task-Lineage: 366f9d57-c476-448f-96c0-6e753fc8b090
2026-05-13 22:03:38 -07:00

36 lines
1.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { TaskExecutor } from "../executor.js";
describe("executor token usage extraction", () => {
it("uses canonical cache-read/cache-write split (FN-4389)", async () => {
const executor = Object.create(TaskExecutor.prototype) as TaskExecutor;
const methods = executor as unknown as {
extractSessionTokenUsage: (session: unknown) => Promise<{ inputTokens: number; outputTokens: number; cachedTokens: number; cacheWriteTokens: number; totalTokens: number } | undefined>;
accumulateTokenUsage: (existing: undefined, delta: { inputTokens: number; outputTokens: number; cachedTokens: number; cacheWriteTokens: number; totalTokens: number }) => { inputTokens: number; outputTokens: number; cachedTokens: number; cacheWriteTokens: number; totalTokens: number };
};
const delta = await methods.extractSessionTokenUsage({
getSessionStats: () => ({
tokens: { input: 1000, output: 500, cacheRead: 800, cacheWrite: 200, total: 2500 },
}),
});
expect(delta).toMatchObject({
inputTokens: 1000,
outputTokens: 500,
cachedTokens: 800,
cacheWriteTokens: 200,
totalTokens: 2500,
});
const merged = delta ? methods.accumulateTokenUsage(undefined, delta) : undefined;
expect(merged).toMatchObject({
inputTokens: 1000,
outputTokens: 500,
cachedTokens: 800,
cacheWriteTokens: 200,
totalTokens: 2500,
});
});
});