import { render } from "@solidjs/testing-library"; import { createSignal } from "solid-js"; import { describe, expect, it } from "vitest"; import { Presence } from "../../src/utilities/presence/presence"; describe("Presence", () => { it("renders children when present is true", () => { const { getByTestId } = render(() => (
hello
)); expect(getByTestId("content")).toBeTruthy(); }); it("does not render children when present is false", () => { const { queryByTestId } = render(() => (
hello
)); expect(queryByTestId("content")).toBeNull(); }); it("mounts children when present transitions false→true", async () => { const [present, setPresent] = createSignal(false); const { queryByTestId } = render(() => (
hello
)); expect(queryByTestId("content")).toBeNull(); setPresent(true); await Promise.resolve(); expect(queryByTestId("content")).toBeTruthy(); }); it("unmounts children when present transitions true→false", async () => { const [present, setPresent] = createSignal(true); const { queryByTestId } = render(() => (
hello
)); expect(queryByTestId("content")).toBeTruthy(); setPresent(false); await Promise.resolve(); expect(queryByTestId("content")).toBeNull(); }); it("keeps children mounted with forceMount when present is false", () => { const { getByTestId } = render(() => (
hello
)); expect(getByTestId("content")).toBeTruthy(); }); it("exposes opening signal via children-as-function", async () => { const [present, setPresent] = createSignal(false); let capturedOpening = false; render(() => ( {({ opening }) => { if (opening()) capturedOpening = true; return
hello
; }}
)); setPresent(true); // opening is true for one microtask after transitioning in await Promise.resolve(); expect(capturedOpening).toBe(true); }); it("exposes closing signal via children-as-function", async () => { const [present, setPresent] = createSignal(true); let capturedClosing = false; render(() => ( {({ closing }) => { if (closing()) capturedClosing = true; return
hello
; }}
)); setPresent(false); await Promise.resolve(); expect(capturedClosing).toBe(true); }); });