/** * Tests for ArsList * @vi-environment jsdom */ import { beforeEach, describe, expect, it } from "vitest"; import { ArsList } from "./ars-list.js"; describe("ArsList", () => { let element: ArsList; beforeEach(() => { document.body.innerHTML = ""; element = new ArsList(); }); it("registers the ars-list custom element", () => { expect(customElements.get("ars-list")).toBe(ArsList); }); it("creates a shadow root on construction", () => { expect(element.shadowRoot).toBeTruthy(); }); it("does not dispatch select event when not selectable", () => { element.innerHTML = "Item"; document.body.appendChild(element); let fired = false; element.addEventListener("ars-list:select", () => { fired = true; }); const item = element.querySelector("span"); item?.dispatchEvent(new MouseEvent("click", { bubbles: true })); expect(fired).toBe(false); }); it("dispatches ars-list:select when selectable and item clicked", () => { element.setAttribute("selectable", ""); element.innerHTML = "Item 1Item 2"; document.body.appendChild(element); let detail: unknown; element.addEventListener("ars-list:select", (e) => { detail = (e as CustomEvent).detail; }); const items = element.querySelectorAll("span"); items[1]?.dispatchEvent(new MouseEvent("click", { bubbles: true })); expect(detail).toBeTruthy(); expect((detail as Record).index).toBe(1); }); });