import { describe, expect, it } from "bun:test"; import { SelectItem } from "@chopin/visuals"; import { Children, createElement, isValidElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { Controls } from "./controls"; import { AuthoredContent, callouts } from "./authored-content"; import { Foundations } from "./foundations"; import { InteractiveSpecimens } from "./interactive"; import { AUDIT_INVENTORY } from "./inventory"; import { Surfaces } from "./surfaces"; import type { ReactElement, ReactNode } from "react"; 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); } function elementsOfType( node: ReactNode, type: ReactElement["type"], found: ReactElement<{ children?: ReactNode; value?: unknown }>[] = [], ) { Children.forEach(node, child => { if (!isValidElement<{ children?: ReactNode; value?: unknown }>(child)) return; if (child.type === type) found.push(child); elementsOfType(child.props.children, type, found); }); return found; } 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("Panel close"); expect(markup).not.toContain("Consolidated exact duplicate"); expect(markup).toContain("Strong resting"); expect(markup).toContain("--button-edge-width"); for ( let token of [ "--text-2xs", "--text-xs", "--text-sm", "--text-base", "--text-lg", "--text-xl", "--text-2xl", ] ) { expect(markup).toContain(`var(${token})`); } }); 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 every Badge tone", () => { let item = AUDIT_INVENTORY.flatMap(group => group.items).find( candidate => candidate.id === "badge", ); expect(item).toEqual({ id: "badge", label: "Badges", source: "packages/visuals/src/ui/badge.tsx", states: ["neutral", "success", "warning", "danger"], }); let markup = renderToStaticMarkup(createElement(Foundations)); let specimen = plate(markup, "badge"); expect(specimen).toContain('data-audit-item="badge"'); expect(specimen.match(/data-slot="badge"/g)).toHaveLength(4); for (let tone of ["neutral", "success", "warning", "danger"]) { expect(specimen).toContain(`data-tone="${tone}"`); expect(specimen).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("adds presentation tables without replacing the authored editor table", () => { let items = AUDIT_INVENTORY.flatMap(group => group.items); let presentationTable = items.find(candidate => candidate.id === "presentation-table"); let authoredTable = items.find(candidate => candidate.id === "table"); expect(presentationTable).toEqual({ id: "presentation-table", label: "Presentation tables", source: "packages/visuals/src/ui/table.tsx", states: ["plain", "contained", "narrow-overflow"], }); expect(authoredTable).toEqual({ id: "table", label: "Tables", source: "packages/editor/src/table/chrome.tsx", states: ["default", "selected-cell", "toolbar", "overflow"], }); let markup = renderToStaticMarkup(createElement(Foundations)); let specimen = plate(markup, "presentation-table"); expect(specimen).toContain('data-audit-item="presentation-table"'); expect(specimen).toContain('data-table-example="plain"'); expect(specimen).toContain('data-table-example="contained-overflow"'); expect(specimen).toContain('data-variant="plain"'); expect(specimen).toContain('data-variant="contained"'); expect(specimen.match(/data-slot="table"/g)).toHaveLength(2); expect(specimen.match(/aria-label="Deployment activity"/g)).toHaveLength(2); expect(specimen).not.toContain(" { 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"'); expect(markup).toContain('data-slot="select-trigger"'); expect(markup).toContain('data-slot="select-value"'); expect(markup).not.toContain('