import { expect, test } from '@playwright/test' import { formatBillingPrice, formatPlanCatalogPrice, parseBillingCatalog, } from '../src/lib/billing-catalog' const catalogPayload = { schema_version: '1', plans: [ { tier: 'pro', prices: [ { provider: 'payple', unit_amount: 9900, currency: 'KRW', interval: 'month', interval_count: 1 }, { provider: 'stripe', unit_amount: 999, currency: 'USD', interval: 'month', interval_count: 1 }, ], }, { tier: 'pro_plus', prices: [ { provider: 'payple', unit_amount: 29900, currency: 'KRW', interval: 'month', interval_count: 1 }, ], }, ], } test.describe('billing catalog strict client contract', () => { test('parses provider prices and formats minor currency units', () => { const catalog = parseBillingCatalog(catalogPayload) expect(catalog).not.toBeNull() expect(formatBillingPrice(catalog!.plans.pro[0])).toContain('9,900') expect(formatBillingPrice(catalog!.plans.pro[1])).toContain('9.99') expect(formatPlanCatalogPrice('pro', catalog)).toContain('Payple') expect(formatPlanCatalogPrice('pro', catalog)).toContain('Stripe') expect(formatPlanCatalogPrice('free', catalog)).toBe('무료') }) test('rejects duplicate tiers/providers, malformed amounts, and unknown values', () => { const invalid = [ null, {}, { ...catalogPayload, schema_version: '2' }, { ...catalogPayload, plans: [catalogPayload.plans[0], catalogPayload.plans[0]] }, { ...catalogPayload, plans: [{ tier: 'pro', prices: [catalogPayload.plans[0].prices[0], catalogPayload.plans[0].prices[0]], }, catalogPayload.plans[1]], }, { ...catalogPayload, plans: [{ tier: 'pro', prices: [{ ...catalogPayload.plans[0].prices[0], unit_amount: 0 }] }, catalogPayload.plans[1]], }, { ...catalogPayload, plans: [{ tier: 'pro', prices: [{ ...catalogPayload.plans[0].prices[0], currency: 'KRW