import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; const main = readFileSync(new URL('../../src/main.tsx', import.meta.url), 'utf8'); const tokens = readFileSync(new URL('../../src/styles/ui-tokens.css', import.meta.url), 'utf8'); const base = readFileSync(new URL('../../src/styles/base.css', import.meta.url), 'utf8'); const datahub = readFileSync(new URL('../../src/styles/datahub.css', import.meta.url), 'utf8'); describe('binding ASSESSOR typography system', () => { it('bundles one font family and exposes the approved semantic hierarchy', () => { expect(main).toContain("import '@fontsource-variable/inter/wght.css';"); expect(tokens).toContain('--font-ui: "Inter Variable", sans-serif;'); expect(tokens).toContain('--font-mono: var(--font-ui);'); expect(tokens).toContain('--font-donut-display: var(--font-ui);'); expect(tokens).toContain('--type-h1-size: 56px;'); expect(tokens).toContain('--type-h2-size: 32px;'); expect(tokens).toContain('--type-h3-size: 18px;'); expect(tokens).toContain('--type-h4-size: 16px;'); expect(tokens).toContain('--type-body-size: 16px;'); expect(tokens).toContain('--type-label-size: 14px;'); expect(tokens).toContain('--type-meta-size: 13px;'); expect(tokens).toContain('--type-badge-size: 12px;'); expect(tokens).toContain('--type-table-head-size: 13px;'); expect(tokens).toContain('--type-button-size: 14px;'); expect(tokens).toContain('--fw-regular: 400;'); expect(tokens).toContain('--fw-semibold: 600;'); expect(tokens).toContain('--fw-bold: 700;'); }); it('uses title case for semantic headings and labels while reserving uppercase for table heads', () => { expect(base).toMatch(/h1\s*\{[^}]*font-size:\s*var\(--type-h1-size\);[^}]*font-weight:\s*var\(--fw-semibold\);/s); expect(base).toMatch(/td\s*\{[^}]*font-size:\s*var\(--type-body-size\);/s); expect(base).toMatch(/th\s*\{[^}]*font-size:\s*var\(--type-table-head-size\);[^}]*text-transform:\s*uppercase;/s); expect(datahub).toMatch(/\.tenant-timeslots-heading\s*\{[^}]*font-size:\s*var\(--type-h3-size\);[^}]*text-transform:\s*none;/s); expect(datahub).toMatch(/\.tenant-information-title > strong\s*\{[^}]*font-size:\s*var\(--type-h3-size\);[^}]*text-transform:\s*none;/s); expect(datahub).toMatch(/\.tenant-detail-page \.tenant-editor-form \.tenant-field-label\s*\{[^}]*font-size:\s*var\(--type-label-size\);[^}]*text-transform:\s*none;/s); }); });