Files
EJClaw/src/claude-usage.test.ts

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',
);
});
});