import { describe, expect, it } from 'vitest'; import type { TenantPackageSummary } from '../../api'; import { buildPackageUsageMetrics, usagePercent } from '../billingUsage'; const basePackage: TenantPackageSummary = { id: 1, package_id: 1, package_name: 'Pro', active: true, used_events: 2, remaining_events: 3, price: 120, currency: 'EUR', purchased_at: null, expires_at: null, package_limits: { max_events_per_year: 5, max_guests: 150, max_photos: 1000, }, branding_allowed: true, watermark_allowed: true, features: null, }; describe('buildPackageUsageMetrics', () => { it('builds usage metrics for event, guest, and photo limits', () => { const metrics = buildPackageUsageMetrics(basePackage); const keys = metrics.map((metric) => metric.key); expect(keys).toEqual(['events', 'guests', 'photos']); const eventMetric = metrics.find((metric) => metric.key === 'events'); expect(eventMetric?.used).toBe(2); expect(eventMetric?.limit).toBe(5); expect(eventMetric?.remaining).toBe(3); }); it('filters metrics without limits', () => { const metrics = buildPackageUsageMetrics({ ...basePackage, package_limits: { max_events_per_year: 0 }, }); expect(metrics).toHaveLength(0); }); }); describe('usagePercent', () => { it('calculates usage percent when usage is known', () => { const metrics = buildPackageUsageMetrics(basePackage); const eventMetric = metrics.find((metric) => metric.key === 'events'); expect(eventMetric).toBeTruthy(); expect(usagePercent(eventMetric!)).toBe(40); }); it('defaults to full bar when usage is unknown', () => { const metrics = buildPackageUsageMetrics({ ...basePackage, used_events: NaN, remaining_events: null, package_limits: { max_events_per_year: 10 }, }); expect(usagePercent(metrics[0])).toBe(100); }); });