// @vitest-environment jsdom import { act } from "react"; import { createRoot, type Root } from "react-dom/client"; import { afterEach, beforeEach, expect, it, vi } from "vitest"; import { BotAvatar } from "./bot-avatar.js"; let container: HTMLDivElement; let root: Root; beforeEach(() => { (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; vi.useFakeTimers(); container = document.createElement("div"); document.body.append(container); root = createRoot(container); }); afterEach(() => { act(() => root.unmount()); container.remove(); vi.useRealTimers(); }); function moment() { return container.querySelector("svg[data-oo-moment]")?.getAttribute("data-oo-moment"); } it("celebrates when a run finishes, then settles", () => { act(() => root.render()); expect(moment()).toBe("working"); act(() => root.render()); expect(moment()).toBe("success"); act(() => vi.advanceTimersByTime(3000)); expect(moment()).toBe("idle"); }); it("does not celebrate a failed run", () => { act(() => root.render()); act(() => root.render()); expect(moment()).toBe("concerned"); });