Files
Aether/frontend/src/utils/__tests__/providerKeyQuota.spec.ts
T

145 lines
3.4 KiB
TypeScript
Raw Normal View History

2026-05-09 10:44:45 +08:00
import { describe, expect, it } from 'vitest'
2026-05-22 16:48:15 +08:00
import {
getGeminiCliAccountCreditsText,
getQuotaDisplayText,
} from '../providerKeyQuota'
2026-05-09 10:44:45 +08:00
describe('providerKeyQuota', () => {
it('includes Codex Spark quota windows in display text', () => {
expect(getQuotaDisplayText({
status_snapshot: {
oauth: {
code: 'valid',
},
account: {
code: 'ok',
blocked: false,
},
quota: {
provider_type: 'codex',
code: 'ok',
exhausted: false,
windows: [
{
code: 'weekly',
remaining_ratio: 0.9,
},
{
code: '5h',
remaining_ratio: 0.8,
},
{
code: 'spark_5h',
remaining_ratio: 0.6,
},
{
code: 'spark_weekly',
remaining_ratio: 0.95,
},
],
},
},
}, 'codex')).toBe('周剩余 90.0% | 5H剩余 80.0% | Spark5H剩余 60.0% | Spark周剩余 95.0%')
})
it('formats Grok account quota from structured quota windows', () => {
expect(getQuotaDisplayText({
status_snapshot: {
oauth: {
code: 'valid',
},
account: {
code: 'ok',
blocked: false,
},
quota: {
provider_type: 'grok',
code: 'ok',
exhausted: false,
windows: [
{
scope: 'account',
used_value: 2,
limit_value: 10,
remaining_ratio: 0.8,
},
],
},
},
}, 'grok')).toBe('剩余 80.0% (8/10)')
})
it('formats Grok mode quota from model-scoped windows', () => {
expect(getQuotaDisplayText({
status_snapshot: {
oauth: {
code: 'valid',
},
account: {
code: 'ok',
blocked: false,
},
quota: {
provider_type: 'grok',
code: 'ok',
exhausted: false,
plan_type: 'heavy',
windows: [
{
code: 'model:quota_auto',
label: 'auto',
scope: 'model',
remaining_ratio: 0.4,
used_value: 90,
limit_value: 150,
},
{
code: 'model:quota_heavy',
label: 'heavy',
scope: 'model',
remaining_ratio: 0,
used_value: 20,
limit_value: 20,
},
],
},
},
}, 'grok')).toBe('Auto剩余 40.0% (60/150) | Heavy剩余 0.0% (0/20)')
})
2026-05-22 16:48:15 +08:00
it('formats Gemini CLI AI credits from status snapshot and upstream metadata', () => {
expect(getQuotaDisplayText({
status_snapshot: {
quota: {
provider_type: 'gemini_cli',
code: 'ok',
exhausted: false,
credits: {
remaining: 123.5,
consumed: 7,
},
},
},
}, 'gemini_cli')).toBe('AI Credits 剩余 123.5')
expect(getGeminiCliAccountCreditsText({
status_snapshot: {
quota: {
provider_type: 'gemini_cli',
code: 'ok',
exhausted: false,
},
},
upstream_metadata: {
gemini_cli: {
paidTier: {
id: 'g1-pro-tier',
availableCredits: '41.5',
},
},
},
}, 'gemini_cli')).toBe('AI Credits 剩余 41.5')
})
2026-05-09 10:44:45 +08:00
})