// @vitest-environment happy-dom import React, { act } from "react"; import { createRoot } from "react-dom/client"; import { afterEach, describe, expect, it } from "vitest"; import { usePlayerStore } from "../player/store/playerStore"; import { TimelineToolbar } from "./TimelineToolbar"; (globalThis as unknown as { IS_REACT_ACT_ENVIRONMENT: boolean }).IS_REACT_ACT_ENVIRONMENT = true; afterEach(() => { document.body.innerHTML = ""; usePlayerStore.setState({ autoKeyframeEnabled: true }); }); function renderToolbar() { const host = document.createElement("div"); document.body.append(host); const root = createRoot(host); act(() => { root.render(); }); return { host, root }; } // Regression (#1808): the auto-keyframe toggle is a GLOBAL setting (unlike the // diamond "Add keyframe" button, which needs a selection to mean anything), so // it must stay visible and usable with nothing selected — it must not be // gated behind `domEditSession`/`onToggleKeyframe`. describe("TimelineToolbar — auto-keyframe toggle (#1808)", () => { it("renders enabled (pressed) by default with no selection", () => { const { host, root } = renderToolbar(); const btn = host.querySelector( 'button[aria-label="Auto-record manual edits as keyframes"]', ); expect(btn).not.toBeNull(); expect(btn?.getAttribute("aria-pressed")).toBe("true"); act(() => root.unmount()); }); it("flips autoKeyframeEnabled in the store when clicked", () => { const { host, root } = renderToolbar(); const btn = host.querySelector( 'button[aria-label="Auto-record manual edits as keyframes"]', ); if (!btn) throw new Error("auto-keyframe toggle not rendered"); act(() => { btn.dispatchEvent(new MouseEvent("click", { bubbles: true })); }); expect(usePlayerStore.getState().autoKeyframeEnabled).toBe(false); expect(btn.getAttribute("aria-pressed")).toBe("false"); act(() => root.unmount()); }); });