import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; describe("home progress list layout", () => { it("keeps the continue reading list scrollable after three visible books", () => { const styles = readFileSync(new URL("../styles/app.css", import.meta.url), "utf8"); const continueTile = styles.match(/\.continue-tile\s*\{[^}]+\}/)?.[0] ?? ""; expect(styles).toContain(".continue-grid,\n.library-list {\n --continue-visible-rows: 3;"); expect(styles).toContain("--continue-tile-block-size: 112px"); expect(styles).toContain("max-height: calc((var(--continue-tile-block-size) * var(--continue-visible-rows)) + (10px * (var(--continue-visible-rows) - 1)))"); expect(styles).toContain("overflow-y: auto"); expect(styles).toContain("scrollbar-gutter: stable"); expect(continueTile).toContain("block-size: var(--continue-tile-block-size)"); expect(continueTile).toContain("overflow: hidden"); }); it("keeps home book cards scoped and simplified", () => { const source = readFileSync(new URL("./HomePage.tsx", import.meta.url), "utf8"); expect(source).toContain("renderHomeBook"); expect(source).toContain("home-book-card"); expect(source).toContain("progressPercent"); expect(source).toContain(""); expect(source).toContain("progressPercent: item.progress.percent"); expect(source).not.toContain(" { const styles = readFileSync(new URL("../styles/app.css", import.meta.url), "utf8"); const bookGrid = styles.match(/\.book-grid\s*\{[^}]+\}/)?.[0] ?? ""; const homeBookGrid = styles.match(/\.home-book-grid\s*\{[^}]+\}/)?.[0] ?? ""; expect(bookGrid).toContain("grid-template-columns: repeat(auto-fit, minmax(min(100%, max(var(--book-grid-column-min), calc((100% - (var(--book-grid-gap) * 4)) / 5))), 1fr))"); expect(homeBookGrid).toContain("grid-template-columns: repeat(auto-fit, minmax(min(100%, max(var(--book-grid-column-min), calc((100% - (var(--book-grid-gap) * 4)) / 5))), 1fr))"); expect(bookGrid).toContain("width: 100%"); expect(homeBookGrid).toContain("width: 100%"); expect(bookGrid).not.toContain("max-width"); expect(homeBookGrid).not.toContain("max-width"); }); it("keeps the library list capped like continue reading", () => { const styles = readFileSync(new URL("../styles/app.css", import.meta.url), "utf8"); const libraryButton = styles.match(/\.library-list button\s*\{[^}]+\}/)?.[0] ?? ""; expect(styles).toContain(".continue-grid,\n.library-list {\n --continue-visible-rows: 3;"); expect(styles).toContain("height: calc((var(--continue-tile-block-size) * var(--continue-visible-rows)) + (10px * (var(--continue-visible-rows) - 1)))"); expect(styles).toContain("max-height: calc((var(--continue-tile-block-size) * var(--continue-visible-rows)) + (10px * (var(--continue-visible-rows) - 1)))"); expect(libraryButton).toContain("block-size: var(--continue-tile-block-size)"); expect(libraryButton).toContain("overflow: hidden"); }); });