Files
wehub-resource-sync c48612c494
CI / E2E Tests (push) Has been cancelled
CI / Lint, Typecheck & Unit Tests (push) Has been cancelled
Docs Build / Build docs site (push) Has been cancelled
Publish @openmaic packages / Build, validate & publish (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:23 +08:00

42 lines
1.3 KiB
TypeScript

import { NextRequest } from 'next/server';
import { describe, expect, it, vi } from 'vitest';
import { GET } from '@/app/api/usage/route';
import { readUsageRecords, type UsageRecord } from '@/lib/server/usage-storage';
vi.mock('@/lib/server/usage-storage', async (importOriginal) => {
const actual = await importOriginal<typeof import('@/lib/server/usage-storage')>();
return {
...actual,
readUsageRecords: vi.fn(),
};
});
describe('GET /api/usage', () => {
it('does not add cache detail fields again to displayed token totals', async () => {
const record: UsageRecord = {
id: '1',
createdAt: Date.UTC(2026, 5, 29),
kind: 'llm',
source: 'chat',
providerId: 'openai',
modelId: 'gpt-x',
modelString: 'openai:gpt-x',
inputTokens: 100,
outputTokens: 20,
cacheReadTokens: 30,
cacheCreationTokens: 10,
reasoningTokens: 0,
unit: 'token',
};
vi.mocked(readUsageRecords).mockResolvedValueOnce([record]);
const response = await GET(new NextRequest('http://localhost/api/usage'));
const body = await response.json();
expect(body.totals.llmTokens).toBe(120);
expect(body.byModel[0].totalTokens).toBe(120);
expect(body.byModel[0].cacheReadTokens).toBe(30);
expect(body.byModel[0].cacheCreationTokens).toBe(10);
});
});