mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-08-31 02:05:31 +08:00
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { describe, expect, test } from 'bun:test';
|
|
import { buildTimelineLane } from '@/features/quota/quotaTimelineModel';
|
|
import { buildKimiQuotaRows } from '@/utils/quota';
|
|
|
|
describe('Kimi quota ordering', () => {
|
|
test('shows the 5-hour limit before the weekly limit and exposes it to the timeline', () => {
|
|
const rows = buildKimiQuotaRows({
|
|
usage: {
|
|
used: '1',
|
|
limit: '100',
|
|
remaining: '99',
|
|
resetTime: '2099-08-06T13:59:23.136523Z',
|
|
},
|
|
limits: [
|
|
{
|
|
detail: {
|
|
used: '2',
|
|
limit: '100',
|
|
remaining: '98',
|
|
resetTime: '2099-07-31T06:59:23.136523Z',
|
|
},
|
|
window: {
|
|
duration: 300,
|
|
timeUnit: 'TIME_UNIT_MINUTE',
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
expect(rows.map(({ id }) => id)).toEqual(['limit-0', 'summary']);
|
|
expect(rows[0]?.labelKey).toBe('kimi_quota.limit_window');
|
|
expect(rows[0]?.labelParams).toEqual({ duration: '5h' });
|
|
expect(rows[0]?.periodHours).toBe(5);
|
|
expect(rows[1]?.labelKey).toBe('kimi_quota.weekly_limit');
|
|
expect(rows[1]?.periodHours).toBe(168);
|
|
|
|
const lane = buildTimelineLane({
|
|
name: 'kimi.json',
|
|
displayName: 'Kimi',
|
|
provider: 'kimi',
|
|
quota: { status: 'success', rows },
|
|
maxPeriodHours: 5,
|
|
});
|
|
expect(lane.anchorMs).toBe(rows[0]?.resetAtMs);
|
|
expect(lane.periodHours).toBe(5);
|
|
});
|
|
});
|
|
|
|
describe('Kimi quota reset formatting', () => {
|
|
const getResetHint = (resetIn: number): string | undefined => {
|
|
const rows = buildKimiQuotaRows({
|
|
usage: {
|
|
used: 200,
|
|
limit: 1000,
|
|
resetIn,
|
|
},
|
|
});
|
|
|
|
return rows[0]?.resetHint;
|
|
};
|
|
|
|
test('converts reset durations longer than a day to days and hours', () => {
|
|
expect(getResetHint(132 * 3600)).toBe('5d 12h');
|
|
expect(getResetHint(168 * 3600)).toBe('7d 0h');
|
|
});
|
|
|
|
test('keeps hour and minute formatting for durations shorter than a day', () => {
|
|
expect(getResetHint(5 * 3600 + 30 * 60)).toBe('5h 30m');
|
|
});
|
|
|
|
test('shows less than one minute for short positive durations', () => {
|
|
expect(getResetHint(59)).toBe('<1m');
|
|
});
|
|
});
|