55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
getUsageCacheReadKeys,
|
|
getUsageCacheWriteKey,
|
|
type ClaudeUsageData,
|
|
} from './claude-usage.js';
|
|
|
|
describe('ClaudeUsageData', () => {
|
|
it('represents the API response structure correctly', () => {
|
|
const data: ClaudeUsageData = {
|
|
five_hour: { utilization: 45.2, resets_at: '2026-03-23T17:00:00Z' },
|
|
seven_day: { utilization: 72.1, resets_at: '2026-03-29T00:00:00Z' },
|
|
seven_day_sonnet: {
|
|
utilization: 60.0,
|
|
resets_at: '2026-03-29T00:00:00Z',
|
|
},
|
|
seven_day_opus: { utilization: 80.0, resets_at: '2026-03-29T00:00:00Z' },
|
|
};
|
|
|
|
expect(data.five_hour?.utilization).toBe(45.2);
|
|
expect(data.seven_day?.utilization).toBe(72.1);
|
|
expect(data.seven_day_sonnet?.utilization).toBe(60.0);
|
|
expect(data.seven_day_opus?.utilization).toBe(80.0);
|
|
});
|
|
|
|
it('allows partial data (only five_hour)', () => {
|
|
const data: ClaudeUsageData = {
|
|
five_hour: { utilization: 10, resets_at: '2026-03-23T17:00:00Z' },
|
|
};
|
|
|
|
expect(data.five_hour?.utilization).toBe(10);
|
|
expect(data.seven_day).toBeUndefined();
|
|
});
|
|
|
|
it('prefers account-based cache keys and falls back to token suffixes', () => {
|
|
expect(
|
|
getUsageCacheReadKeys(
|
|
'sk-ant-oat01-currentHNCJmAAA',
|
|
0,
|
|
'sk-ant-oat01-credsEqnOPAAA',
|
|
),
|
|
).toEqual(['account-0', 'EqnOPAAA', 'HNCJmAAA']);
|
|
});
|
|
|
|
it('writes cache under account key when account index is known', () => {
|
|
expect(getUsageCacheWriteKey('sk-ant-oat01-currentHNCJmAAA', 0)).toBe(
|
|
'account-0',
|
|
);
|
|
expect(getUsageCacheWriteKey('sk-ant-oat01-currentHNCJmAAA')).toBe(
|
|
'HNCJmAAA',
|
|
);
|
|
});
|
|
});
|