import { describe, expect, it } from 'vitest'; import type { EventPackageLimits } from '../../services/eventApi'; import { buildLimitSummaries } from '../limitSummaries'; const translations = new Map([ ['upload.limitSummary.cards.photos.title', 'Fotos'], ['upload.limitSummary.cards.photos.remaining', 'Noch {remaining} von {limit}'], ['upload.limitSummary.cards.photos.unlimited', 'Unbegrenzte Uploads'], ['upload.limitSummary.cards.guests.title', 'Gäste'], ['upload.limitSummary.cards.guests.remaining', '{remaining} Gäste frei (max. {limit})'], ['upload.limitSummary.cards.guests.unlimited', 'Unbegrenzte Gäste'], ['upload.limitSummary.badges.ok', 'OK'], ['upload.limitSummary.badges.warning', 'Warnung'], ['upload.limitSummary.badges.limit_reached', 'Limit erreicht'], ['upload.limitSummary.badges.unlimited', 'Unbegrenzt'], ]); const t = (key: string) => translations.get(key) ?? key; describe('buildLimitSummaries', () => { it('builds photo summary with progress and warning tone', () => { const limits: EventPackageLimits = { photos: { limit: 100, used: 80, remaining: 20, percentage: 80, state: 'warning', threshold_reached: 80, next_threshold: 95, thresholds: [80, 95], }, guests: null, gallery: null, can_upload_photos: true, can_add_guests: true, }; const cards = buildLimitSummaries(limits, t); expect(cards).toHaveLength(1); const card = cards[0]; expect(card.id).toBe('photos'); expect(card.tone).toBe('warning'); expect(card.progress).toBe(80); expect(card.valueLabel).toBe('80 / 100'); expect(card.description).toBe('Noch 20 von 100'); expect(card.badgeLabel).toBe('Warnung'); }); it('builds unlimited guest summary without progress', () => { const limits: EventPackageLimits = { photos: null, guests: { limit: null, used: 5, remaining: null, percentage: null, state: 'unlimited', threshold_reached: null, next_threshold: null, thresholds: [], }, gallery: null, can_upload_photos: true, can_add_guests: true, }; const cards = buildLimitSummaries(limits, t); expect(cards).toHaveLength(1); const card = cards[0]; expect(card.id).toBe('guests'); expect(card.progress).toBeNull(); expect(card.tone).toBe('neutral'); expect(card.valueLabel).toBe('Unbegrenzt'); expect(card.description).toBe('Unbegrenzte Gäste'); expect(card.badgeLabel).toBe('Unbegrenzt'); }); it('returns empty list when no limits are provided', () => { expect(buildLimitSummaries(null, t)).toEqual([]); expect(buildLimitSummaries(undefined, t)).toEqual([]); }); });