1// @vitest-environment jsdom
2
3import { act } from "react";
4import { createRoot } from "react-dom/client";
5import { expect, it, vi } from "vite-plus/test";
6
7import { Menu, MenuItem, MenuPopup, MenuTrigger } from "../ui/menu";
8import { ThreadDetailsControl } from "./ThreadDetailsControl";
9
10it("keeps the row label and one chevron when used as a menu trigger", async () => {
11 vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
12 const container = document.createElement("div");
13 document.body.append(container);
14 const root = createRoot(container);
15 try {
16 await act(async () => {
17 root.render(
18 <Menu>
19 <MenuTrigger render={<ThreadDetailsControl part="select" />}>
20 Run on this machine
21 </MenuTrigger>
22 <MenuPopup>
23 <MenuItem>New worktree</MenuItem>
24 </MenuPopup>
25 </Menu>,
26 );
27 });
28 const trigger = container.querySelector("button")!;
29 expect(trigger.textContent).toBe("Run on this machine");
30 expect(trigger.querySelectorAll(".lucide-chevron-down")).toHaveLength(1);
31 await act(async () => trigger.click());
32 expect(document.querySelector('[role="menuitem"]')?.textContent).toBe("New worktree");
33 } finally {
34 await act(async () => root.unmount());
35 container.remove();
36 vi.unstubAllGlobals();
37 }
38});