import { describe, expect, it } from "bun:test"; import { createElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { Controls } from "./controls"; import { AuthoredContent, callouts } from "./authored-content"; import { Foundations } from "./foundations"; import { AUDIT_INVENTORY } from "./inventory"; import { Surfaces } from "./surfaces"; function plate(markup: string, item: string): string { let start = markup.indexOf(`
`); let end = markup.indexOf("
", start); return start === -1 || end === -1 ? "" : markup.slice(start, end + "".length); } describe("design audit specimens", () => { it("renders every foundation family with a visible label", () => { let markup = renderToStaticMarkup(createElement(Foundations)); for (let id of ["colours", "typography", "spacing", "radii", "shadows", "icons"]) { expect(markup).toContain(`data-audit-item="${id}"`); } expect(markup).toContain("Consolidated exact duplicate"); expect(markup).toContain("Strong resting"); for ( let measurement of [ "13px / 20px line-height", "15px / 22px line-height", "17px / 27px line-height", "24px / 30px line-height", "32px / 38px line-height", ] ) expect(markup).toContain(measurement); }); it("inventories and renders every IconLabel tone", () => { let item = AUDIT_INVENTORY.flatMap(group => group.items).find( candidate => candidate.id === "icon-label", ); expect(item).toEqual({ id: "icon-label", label: "Icon labels", source: "packages/visuals/src/ui/icon-label.tsx", states: ["neutral", "success", "warning", "danger"], }); let markup = renderToStaticMarkup(createElement(Foundations)); expect(markup).toContain('data-audit-item="icon-label"'); for (let tone of ["neutral", "success", "warning", "danger"]) { expect(markup).toContain(`data-tone="${tone}"`); expect(markup).toContain(`>${tone[0]?.toUpperCase()}${tone.slice(1)}`); } }); it("inventories and renders representative Sparkline tones and series", () => { let item = AUDIT_INVENTORY.flatMap(group => group.items).find( candidate => candidate.id === "sparkline", ); expect(item).toEqual({ id: "sparkline", label: "Sparklines", source: "packages/visuals/src/ui/sparkline.tsx", states: ["neutral", "success", "warning", "danger"], }); let markup = renderToStaticMarkup(createElement(Foundations)); expect(markup).toContain('data-audit-item="sparkline"'); for (let tone of ["neutral", "success", "warning", "danger"]) { expect(markup).toContain(`data-tone="${tone}"`); } expect(markup).toContain('aria-label="Neutral activity"'); expect(markup).toContain('aria-label="Successful activity"'); expect(markup).toContain(' { let item = AUDIT_INVENTORY.flatMap(group => group.items).find( candidate => candidate.id === "mini-bars", ); expect(item).toEqual({ id: "mini-bars", label: "Mini bars", source: "packages/visuals/src/ui/mini-bars.tsx", states: ["neutral", "success", "warning", "danger"], }); let markup = renderToStaticMarkup(createElement(Foundations)); let specimen = plate(markup, "mini-bars"); expect(specimen).toContain('data-audit-item="mini-bars"'); for (let tone of ["neutral", "success", "warning", "danger"]) { expect(specimen).toContain(`aria-label="${tone} volume"`); expect(specimen).toContain(`data-tone="${tone}"`); } expect(specimen.match(/data-slot="mini-bars"/g)).toHaveLength(4); expect(specimen.match(/ { let item = AUDIT_INVENTORY.flatMap(group => group.items).find( candidate => candidate.id === "progress-bar", ); expect(item).toEqual({ id: "progress-bar", label: "Progress bars", source: "packages/visuals/src/ui/progress-bar.tsx", states: ["zero", "in-progress", "complete"], }); let markup = renderToStaticMarkup(createElement(Foundations)); let specimen = plate(markup, "progress-bar"); expect(specimen).toContain('data-audit-item="progress-bar"'); for ( let [label, value] of [ ["Not started", 0], ["In progress", 62.5], ["Complete", 100], ] as const ) { expect(specimen).toContain(`aria-label="${label}"`); expect(specimen).toContain(`aria-valuenow="${value}"`); expect(specimen).toContain(`>${value}%`); } expect(specimen.match(/role="progressbar"/g)).toHaveLength(3); }); it("renders controls with their native accessibility states", () => { let markup = renderToStaticMarkup(createElement(Controls)); for ( let id of [ "buttons", "icon-buttons", "links", "fields", "selections", "tabs", "menus", "dropdowns", ] ) { expect(markup).toContain(`data-audit-item="${id}"`); } expect(markup).toContain('aria-label="Add document"'); expect(markup).toContain("disabled"); expect(markup).toContain('aria-selected="true"'); expect(markup).toContain('role="menu"'); }); it("renders every application surface and its meaningful states", () => { let markup = renderToStaticMarkup(createElement(Surfaces)); for (let item of AUDIT_INVENTORY.find(group => group.id === "surfaces")!.items) { expect(markup).toContain(`data-audit-item="${item.id}"`); } expect(markup).toContain('role="dialog"'); expect(markup).toContain('aria-current="page"'); expect(markup).toContain('aria-label="Compact workspace view"'); expect(markup).toContain('data-chat-entry="true"'); expect(markup).toContain("Avatar image loading"); expect(markup).toContain("Editing this question"); expect(markup).toContain('role="alert"'); }); it("renders every authored-content family through the static editor or record card", () => { let markup = renderToStaticMarkup(createElement(AuthoredContent)); for (let item of AUDIT_INVENTORY.find(group => group.id === "authored-content")!.items) { expect(markup).toContain(`data-audit-item="${item.id}"`); } expect(markup).toContain('role="document"'); for (let type of ["note", "tip", "important", "warning", "danger"]) { expect(callouts).toContain(`type="${type}"`); } expect(markup).toContain("Research question"); expect(markup).toContain("Research ready"); }); });