import { describe, expect, it } from 'vitest'; import { en } from './en'; import { getTranslations } from './index'; import { it as italian } from './it'; function exerciseDynamicCopy( translations: typeof en ) { return [ translations.freeTier.remaining( 3 ), translations.result.tryingOn( 'Dress' ), translations.size.alsoConsider( 'M' ), translations.size.alsoConsiderRoomier( 'L' ), translations.size.alsoConsiderCloser( 'S' ), translations.size.cartUsesSize( 'M' ), translations.gallery.openWithCount( 2 ), translations.gallery.removeLabel( 'Dress' ), translations.gallery.formatDate( new Date( '2026-09-15T12:00:00Z' ) ), translations.counter.remaining( 1 ), translations.counter.remaining( 2 ), translations.quota.visitorLimitReachedMessage(), translations.quota.visitorLimitReachedMessage( 1 ), translations.quota.visitorLimitReachedMessage( 17 ), translations.quota.visitorLimitReachedMessage( 60 ), translations.quota.visitorLimitReachedMessage( 121 ), translations.quota.currentPlan( 'Pro' ), translations.warning.freeRemaining( 1 ), translations.warning.freeRemaining( 2 ), translations.warning.monthlyRemaining( 1 ), translations.warning.monthlyRemaining( 2 ), ]; } describe( 'widget translations', () => { it( 'selects Italian locale variants and otherwise defaults to English', () => { expect( getTranslations( 'it-IT' ) ).toBe( italian ); expect( getTranslations( 'en-GB' ) ).toBe( en ); expect( getTranslations() ).toBe( en ); } ); it.each( [ [ 'English', en ], [ 'Italian', italian ] ] as const )( 'keeps every dynamic %s message usable across singular, plural, and cooldown shapes', ( _name, translations ) => { const messages = exerciseDynamicCopy( translations ); expect( messages ).toHaveLength( 21 ); expect( messages.every( ( message ) => typeof message === 'string' && message.length > 0 ) ).toBe( true ); } ); } );