import { describe, expect, it } from "vitest";
import { headerSchema, headerItemSchema } from "./header";

describe("headerItemSchema", () => {
  it("accepts a valid nav item", () => {
    const result = headerItemSchema.parse({
      label: "Home",
      href: "/",
    });
    expect(result.label).toBe("Home");
    expect(result.external).toBe(false);
  });

  it("accepts an external nav item", () => {
    const result = headerItemSchema.parse({
      label: "Blog",
      href: "https://blog.example.com",
      external: true,
    });
    expect(result.external).toBe(true);
  });

  it("rejects an empty label", () => {
    expect(() => headerItemSchema.parse({ label: "", href: "/" })).toThrow();
  });

  it("rejects a label over 64 chars", () => {
    expect(() =>
      headerItemSchema.parse({ label: "x".repeat(65), href: "/" }),
    ).toThrow();
  });

  it("rejects an empty href", () => {
    expect(() =>
      headerItemSchema.parse({ label: "Home", href: "" }),
    ).toThrow();
  });
});

describe("headerSchema", () => {
  it("accepts a valid header with items", () => {
    const result = headerSchema.parse({
      items: [{ label: "Home", href: "/" }],
    });
    expect(result.items).toHaveLength(1);
    expect(result.logoId).toBeUndefined();
  });

  it("accepts a header with a logoId", () => {
    const result = headerSchema.parse({
      logoId: "logo-abc",
      items: [],
    });
    expect(result.logoId).toBe("logo-abc");
  });

  it("accepts a header with no items", () => {
    const result = headerSchema.parse({ items: [] });
    expect(result.items).toHaveLength(0);
  });
});
