import { expect, test } from "bun:test"; import { readFileSync } from "node:fs"; import { renderToStaticMarkup } from "react-dom/server"; import { ConfigProvider, Select } from "antd"; import { useContext } from "react"; import { CollectionToolbar } from "@/components/layout/collection-toolbar"; import { getWorkspaceAntThemeConfig } from "@/lib/app-theme"; import { assetGridCardMinWidth, assetGridDensityOptions, parseAssetGridDensity } from "@/pages/assets/asset-grid-density"; test("density restores all saved choices and defaults invalid preferences to standard", () => { for (const value of [6, 8, 10] as const) { expect(parseAssetGridDensity(String(value))).toBe(value); expect(parseAssetGridDensity(value)).toBe(value); } for (const value of [null, undefined, "", "broken", "12"]) { expect(parseAssetGridDensity(value)).toBe(8); } }); test("each density has a distinct usable card size at normal library widths", () => { expect(assetGridDensityOptions.map(({ value }) => value)).toEqual([6, 8, 10]); const widths = [6, 8, 10].map((density) => assetGridCardMinWidth[parseAssetGridDensity(density)]); expect(widths).toEqual([272, 208, 160]); // CSS auto-fill: n columns fit when n * minimum + (n - 1) * gap <= width. for (const available of [720, 900, 1100]) { const columns = widths.map((minimum) => Math.floor((available + 16) / (minimum + 16))); expect(columns[0]).toBeLessThan(columns[1]); expect(columns[1]).toBeLessThan(columns[2]); } }); test("real collection toolbar supplies filled selects without changing their labels or value", () => { function PopupConfigProbe() { const { select } = useContext(ConfigProvider.ConfigContext); return {JSON.stringify(select?.classNames)}; } const html = renderToStaticMarkup(