import assert from "node:assert/strict"; import { dirname, join } from "node:path"; import { test } from "node:test"; import { fileURLToPath } from "node:url"; import * as ejs from "ejs"; const filterBar = join(dirname(fileURLToPath(import.meta.url)), "..", "views", "partials", "filter-bar.ejs"); const render = (data: Record = {}): Promise => ejs.renderFile(filterBar, data); const flat = (s: string): string => s.replace(/>\s+<").replace(/\s+/g, " ").trim(); const config = { label: "Filter people", rows: [ [ { type: "search", name: "q", placeholder: "Search people…", value: "ann", label: "Search people" }, { type: "segmented", name: "status", legend: "Status", value: "active", options: [ { value: "all", label: "All", count: "1,284" }, { value: "active", label: "Active" }, { value: "archived", label: "Archived" }, ], }, { type: "select", name: "team", label: "Team", value: "design", options: [{ value: "", label: "All teams" }, { value: "design", label: "Design" }] }, { type: "spacer" }, ], [ { type: "chips", name: "tag", legend: "Tags", value: ["engineering", "oncall"], options: [{ value: "engineering", label: "Engineering" }, { value: "design", label: "Design" }, { value: "oncall", label: "On-call" }], }, { type: "daterange", legend: "Joined", from: { name: "joined_from", value: "2026-01-01", label: "Joined from" }, to: { name: "joined_to", value: "2026-06-14", label: "Joined to" } }, ], ], pills: [{ label: "Team", value: "Engineering", remove: "?tag=oncall" }], clearHref: "?", }; test("filter-bar renders a GET form with every control type, reflecting current values", async () => { const html = flat(await render(config)); // GET form (server-side filtering, zero-JS). assert.match(html, /
/); // search — icon + value reflected. assert.match(html, /