import assert from 'node:assert/strict' import test from 'node:test' import { SEO_LABELS, formatSeoLabel, pickLabels } from '../app/utils/labels.ts' test('labels: en and pl carry every L8 key', () => { const keys = (o: object, prefix = ''): string[] => Object.entries(o).flatMap(([k, v]) => (v && typeof v === 'object' ? keys(v, `${prefix}${k}.`) : [`${prefix}${k}`])) const want = [ 'breadcrumbs.label', 'pagination.label', 'pagination.previous', 'pagination.next', 'pagination.page', 'sitemap.title', 'sitemap.groupTitle', 'sitemap.pageSuffix', 'sitemap.all', 'sitemap.empty', 'sitemapLink', 'links.newTab', ].sort() assert.deepEqual(keys(SEO_LABELS.en).sort(), want) assert.deepEqual(keys(SEO_LABELS.pl).sort(), want) assert.equal(SEO_LABELS.pl.breadcrumbs.label, 'Ścieżka nawigacji') assert.equal(SEO_LABELS.en.links.newTab, '(opens in a new tab)') }) test('pickLabels: the resolve locale first, then html_lang, then en', () => { assert.equal(pickLabels('pl', 'en').pagination.next, 'Następna strona') assert.equal(pickLabels('pl-PL', '').pagination.next, 'Następna strona') assert.equal(pickLabels('', 'pl-PL').pagination.next, 'Następna strona') assert.equal(pickLabels('de', 'pl').pagination.next, 'Następna strona') assert.equal(pickLabels('de', 'fr').pagination.next, 'Next page') assert.equal(pickLabels(undefined, undefined).sitemap.title, 'Sitemap') }) test('pickLabels: app overrides change a key, add a locale and fill gaps from en', () => { const overrides = { pl: { sitemap: { title: 'Spis stron' } }, de: { pagination: { next: 'Nächste Seite' } } } const pl = pickLabels('pl', '', overrides) assert.equal(pl.sitemap.title, 'Spis stron') assert.equal(pl.sitemap.empty, 'Nie ma jeszcze stron do wyświetlenia.') const de = pickLabels('de', '', overrides) assert.equal(de.pagination.next, 'Nächste Seite') assert.equal(de.pagination.previous, 'Previous page') assert.equal(SEO_LABELS.pl.sitemap.title, 'Mapa strony', 'the built-in dictionary is not mutated') }) test('pickLabels: a non-string override value is ignored', () => { const l = pickLabels('en', '', { en: { sitemapLink: 42 as unknown as string, pagination: 'x' as unknown as object } }) assert.equal(l.sitemapLink, 'Sitemap') assert.equal(l.pagination.label, 'Pagination') }) test('formatSeoLabel: fills {name} placeholders and leaves unknown ones', () => { assert.equal(formatSeoLabel(SEO_LABELS.pl.sitemap.all, { group: 'Wpisy', count: 12 }), 'Wpisy: wszystkie (12)') assert.equal(formatSeoLabel('Page {page} of {pages}', { page: 2 }), 'Page 2 of {pages}') })