Files
kandev/apps/web/components/task/remote-cloud-tooltip-primitives.test.tsx
T

60 lines
2.3 KiB
TypeScript

import { act, cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react";
import { afterEach, expect, it, vi } from "vitest";
import { TooltipProvider } from "@kandev/ui/tooltip";
import { RemoteCloudTooltip } from "./remote-cloud-tooltip";
const pointer = vi.hoisted(() => ({ touch: false }));
vi.mock("@/hooks/use-compact-task-chrome", () => ({ useTouchDrawer: () => pointer.touch }));
afterEach(() => {
cleanup();
pointer.touch = false;
});
// @covers AC-EXECUTORS-TASK-STATUS-001.3
it("links the actual tooltip to the focused DOM trigger and dismisses on Escape", async () => {
render(
<TooltipProvider>
<RemoteCloudTooltip
taskId="task"
executorType="k8s"
status={{ remote_name: "test-pod", remote_state: "running" }}
/>
</TooltipProvider>,
);
const trigger = screen.getByTestId("remote-executor-status-trigger");
act(() => trigger.focus());
const tooltip = await screen.findByRole("tooltip");
expect(trigger.getAttribute("aria-describedby")).toBe(tooltip.id);
fireEvent.keyDown(trigger, { key: "Escape" });
await waitFor(() => expect(screen.queryByRole("tooltip")).toBeNull());
});
// @covers AC-EXECUTORS-TASK-STATUS-001.4
// Reviewer-requested coverage of the existing click and keyboard activation contract.
it.each(["click", "Enter", " "])(
"opens and closes the real drawer via %s without selecting its task",
async (activation) => {
pointer.touch = true;
const selectTask = vi.fn();
render(
<div onClick={selectTask}>
<RemoteCloudTooltip
taskId="task"
executorType="k8s"
status={{ remote_name: "touch-pod", remote_state: "running" }}
/>
</div>,
);
const trigger = screen.getByTestId("remote-executor-status-trigger");
act(() => trigger.focus());
if (activation === "click") fireEvent.click(trigger);
else fireEvent.keyDown(trigger, { key: activation });
const drawer = await screen.findByRole("dialog");
expect(trigger.getAttribute("aria-controls")).toBe(drawer.id);
expect(selectTask).not.toHaveBeenCalled();
fireEvent.click(screen.getByRole("button", { name: "Close" }));
await waitFor(() => expect(trigger.getAttribute("aria-expanded")).toBe("false"));
expect(selectTask).not.toHaveBeenCalled();
},
);