import { describe, expect, test } from 'vitest'; import { ELITE_CODEX_PLAN_TYPE, PREMIUM_CODEX_PLAN_TYPES, resolvePlanTier, } from '@/utils/quota'; describe('resolvePlanTier', () => { test("elite wins for 'pro' even though it is also in the premium set (order contract)", () => { // 顺序契约回归:'pro' 同时命中 PREMIUM_CODEX_PLAN_TYPES, // 一旦 premium 判断先行,Pro 20x 会静默退回金卡。 expect(PREMIUM_CODEX_PLAN_TYPES.has(ELITE_CODEX_PLAN_TYPE)).toBe(true); expect(resolvePlanTier('pro')).toBe('elite'); }); test('normalizes case and whitespace before matching', () => { expect(resolvePlanTier('PRO')).toBe('elite'); expect(resolvePlanTier(' Pro ')).toBe('elite'); expect(resolvePlanTier('Pro-Lite')).toBe('premium'); }); test('maps every pro-lite spelling to premium', () => { expect(resolvePlanTier('prolite')).toBe('premium'); expect(resolvePlanTier('pro-lite')).toBe('premium'); expect(resolvePlanTier('pro_lite')).toBe('premium'); }); test('maps ordinary and unknown plans to plain', () => { expect(resolvePlanTier('plus')).toBe('plain'); expect(resolvePlanTier('team')).toBe('plain'); expect(resolvePlanTier('free')).toBe('plain'); expect(resolvePlanTier('enterprise')).toBe('plain'); }); test('maps missing values to plain', () => { expect(resolvePlanTier(null)).toBe('plain'); expect(resolvePlanTier(undefined)).toBe('plain'); expect(resolvePlanTier('')).toBe('plain'); expect(resolvePlanTier(' ')).toBe('plain'); }); });