import { createRawSnippet } from "svelte";
import { describe, expect, it } from "vitest";
import ProductOverview from "../src/composites/ProductOverview.svelte";
import { productOverview } from "../src/composites/product-overview.variants";
import ProductCatalogueConsumer from "./fixtures/ProductCatalogueConsumer.svelte";
import { expectLayoutReadiness } from "./layout-readiness";
import { classes, classesOf, render, rendered } from "./mount";
const media = createRawSnippet(() => ({
render: () => '
',
}));
describe("ProductOverview", () => {
it("composes canonical heading and stack contracts without owning product copy", () => {
const children = createRawSnippet(() => ({ render: () => "
Dot-grid paper.
" })); const actions = createRawSnippet(() => ({ render: () => '', })); const overview = rendered( render(ProductOverview, { title: "Field notes", description: "A pocket notebook.", price: "$12", media, children, actions, }), ); expect(overview.matches("section[data-product-overview][aria-labelledby]")).toBe(true); expect(overview.querySelector("[data-section-heading] h2")?.textContent).toBe("Field notes"); expect(overview.getAttribute("aria-labelledby")).toBe( overview.querySelector("[data-section-heading] h2")?.id, ); expect(overview.querySelector("[data-product-overview-media] img")?.getAttribute("alt")).toBe( "Black field-notes book", ); expect(overview.querySelector("[data-product-overview-price]")?.textContent).toBe("$12"); expect(overview.querySelector("[data-product-overview-body]")?.textContent).toContain( "Dot-grid paper.", ); }); it("keeps caller-owned actions in native focus order", () => { const actions = createRawSnippet(() => ({ render: () => 'Shipping', })); const overview = rendered(render(ProductOverview, { title: "Field notes", media, actions })); const controls = [...overview.querySelectorAll