import { readFile } from "node:fs/promises";
import path from "node:path";

import { describe, expect, it } from "vitest";

async function read(rel: string) {
  return await readFile(path.join(process.cwd(), rel), "utf8");
}

describe("wcag + responsive shell", () => {
  it("adds skip link and main content anchor", async () => {
    const src = await read("src/layouts/BaseLayout.astro");
    expect(src).toContain('class="skip-link"');
    expect(src).toContain('href="#main-content"');
    expect(src).toContain('id="main-content"');
  });

  it("adds a hamburger toggle with ARIA and a script that updates aria-expanded", async () => {
    const src = await read("src/layouts/BaseLayout.astro");
    expect(src).toContain('class="nav-toggle"');
    expect(src).toContain('aria-controls="primary-nav"');
    expect(src).toContain('aria-expanded="false"');
    expect(src).toContain('id="primary-nav"');
    expect(src).toContain("toggle.setAttribute(\"aria-expanded\"");
    expect(src).toContain("e.key !== \"Escape\"");
  });

  it("defines baseline focus-visible, reduced-motion, and oversized background layer", async () => {
    const css = await read("src/styles/global.css");
    expect(css).toContain("a:focus-visible");
    expect(css).toContain("@media (prefers-reduced-motion: reduce)");
    expect(css).toContain("body::before");
    expect(css).toContain("@media (max-width: 760px)");
    expect(css).toContain(".nav[data-open=\"true\"]");
  });
});
