/* Copyright 2026 Marimo. All rights reserved. */ import { render, screen } from "@testing-library/react"; import { createStore, Provider } from "jotai"; import { describe, expect, it, vi } from "vitest"; import { TooltipProvider } from "@/components/ui/tooltip"; import { layoutStateAtom } from "@/core/layout/state"; import { kioskModeAtom, viewStateAtom } from "@/core/mode"; import { API } from "@/core/network/api"; import { ViewerBanner } from "../viewer-banner"; describe("ViewerBanner", () => { it("renders nothing when not in kiosk mode", () => { const store = createStore(); store.set(kioskModeAtom, false); const { container } = render( , ); expect(container).toBeEmptyDOMElement(); }); it("renders nothing for an intentional kiosk client (?kiosk=true)", () => { const store = createStore(); store.set(kioskModeAtom, true); window.history.pushState({}, "", "/?kiosk=true"); try { const { container } = render( , ); expect(container).toBeEmptyDOMElement(); } finally { window.history.pushState({}, "", "/"); } }); it("renders nothing in a non-vertical layout (grid/slides)", () => { const store = createStore(); store.set(kioskModeAtom, true); store.set(layoutStateAtom, { selectedLayout: "grid", layoutData: {} }); const { container } = render( , ); expect(container).toBeEmptyDOMElement(); }); it("pins the banner without reserving layout space", () => { const store = createStore(); store.set(kioskModeAtom, true); render( , ); const wrapper = screen.getByTestId("takeover-button").closest("div.sticky"); expect(wrapper).toHaveClass("sticky", "top-2", "h-0"); }); it("renders nothing in present mode", () => { const store = createStore(); store.set(kioskModeAtom, true); store.set(viewStateAtom, { mode: "present", cellAnchor: null }); const { container } = render( , ); expect(container).toBeEmptyDOMElement(); }); it("shows take over and posts without reload when viewing", () => { const store = createStore(); store.set(kioskModeAtom, true); const post = vi.spyOn(API, "post").mockResolvedValue({} as never); render( , ); const button = screen.getByTestId("takeover-button"); button.click(); expect(post).toHaveBeenCalledWith( expect.stringContaining("/kernel/takeover"), {}, ); }); });