import { describe, expect, test } from "bun:test";
import { auditImage, createResponsiveImage } from "../src/index.ts";

describe("@wrnexus/image", () => {
  test("builds deterministic responsive image attributes", () => {
    const image = createResponsiveImage({
      src: "/hero.jpg",
      alt: "Hero",
      width: 1200,
      height: 600,
      widths: [400, 800, 1200, 800],
      sizes: "100vw",
      format: "webp",
      fetchPriority: "high",
    });
    expect(image.srcset).toContain("400w");
    expect(image.srcset).toContain("1200w");
    expect(image.loading).toBe("eager");
    expect(image.width).toBe("1200");
  });

  test("reports layout shift and LCP mistakes", () => {
    const issues = auditImage({ src: "hero.jpg", isLcp: true, loading: "lazy" });
    expect(issues.map((issue) => issue.code)).toContain("WRN-IMAGE-DIMENSIONS");
    expect(issues.map((issue) => issue.code)).toContain("WRN-IMAGE-LCP-LAZY");
  });
  test("rejects insecure remote images unless explicitly allowed", () => {
    expect(() =>
      createResponsiveImage({
        src: "http://images.example.com/hero.jpg",
        alt: "Hero",
        width: 800,
        height: 400,
        remoteHosts: ["images.example.com"],
      }),
    ).toThrow();
  });
});
