import { describe, expect, it } from 'vitest' import { clientSourceRoot, findUiI18nViolations } from './verify-client-ui-i18n.ts' function messages(source: string): string[] { return findUiI18nViolations('packages/client/ui-example/src/client/View.tsx', source) .map(violation => violation.text) } describe('Client UI i18n source check', () => { it('rejects direct JSX copy and copy-bearing attributes', () => { expect(messages(` const View = ({ ready }: { ready: boolean }) =>
Hard-coded text
`)).toEqual(['Overview', 'Hard-coded text', 'Search now', 'Wait', 'Still working']) }) it('rejects copy kept in label data and copy helper returns', () => { expect(messages(` const TABS = [{ id: 'summary', label: 'Summary' }] function statusLabel(status: string): string { if (status === 'done') return 'Complete' return 'Still running' } function duration(): string { return 'Not recorded' } function mode(): string { return 'compact' } function displayFailureMessage(): string { return 'API key is invalid' } const emptySummary = 'Nothing to show' function Dialog({ closeLabel = 'Close dialog' }: { closeLabel?: string }) { return closeLabel } `)).toEqual([ 'Summary', 'Complete', 'Still running', 'Not recorded', 'API key is invalid', 'Nothing to show', 'Close dialog', ]) }) it('normalizes native separators before deriving a Client source root', () => { expect(clientSourceRoot('packages/extensions/sample/src/client/View.tsx')) .toBe('packages/extensions/sample/src/client') expect(clientSourceRoot('packages\\extensions\\sample\\src\\client\\View.tsx')) .toBe('packages/extensions/sample/src/client') expect(clientSourceRoot('packages/extensions/sample/src/server/index.ts')).toBeUndefined() }) it('accepts translated copy, dynamic values, structural attributes, and language tokens', () => { expect(messages(` const View = ({ t, value }: { t: (key: string) => string; value: string }) => (
{t('status.complete')} null {value === 'pending' && {value}} {value}
) `)).toEqual([]) }) it('does not inspect locale dictionary owners', () => { expect(findUiI18nViolations( 'packages/client/ui-example/src/client/locales.ts', 'export const en = { title: "Hard-coded by design" }', )).toEqual([]) }) })