import { render, screen, within } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { describe, expect, it } from "vitest"; import type { InstanceTab } from "../../generated/types"; import InstanceTabsPanel from "./InstanceTabsPanel"; const tabs: InstanceTab[] = [ { id: "tab_alpha", instanceId: "inst_123", title: "Alpha Tab", url: "https://example.com/alpha", }, { id: "tab_beta", instanceId: "inst_123", title: "Beta Tab", url: "https://example.com/beta", }, ]; describe("InstanceTabsPanel", () => { it("auto-selects the first tab and shows its details", () => { render(); expect(screen.getByText("Open Tabs (2)")).toBeInTheDocument(); // Find heading for first tab title const titleHeading = screen.getByRole("heading", { name: "Alpha Tab" }); const detailPanel = titleHeading.closest(".rounded-xl") as HTMLElement; expect( within(detailPanel).getByText("https://example.com/alpha"), ).toBeInTheDocument(); // IdBadge will show "alpha" instead of "tab_alpha" expect(within(detailPanel).getByText("alpha")).toBeInTheDocument(); }); it("updates the selected tab details when a tab is clicked", async () => { const user = userEvent.setup(); render(); // Select Beta tab from list const betaTabItem = screen .getByText("Beta Tab") .closest('[role="button"]')!; await user.click(betaTabItem); // Find heading for beta tab title const titleHeading = screen.getByRole("heading", { name: "Beta Tab" }); const detailPanel = titleHeading.closest(".rounded-xl") as HTMLElement; expect( within(detailPanel).getByText("https://example.com/beta"), ).toBeInTheDocument(); expect(within(detailPanel).getByText("beta")).toBeInTheDocument(); }); it("shows an empty state when there are no tabs", () => { render(); expect(screen.getByText("Open Tabs (0)")).toBeInTheDocument(); expect(screen.getByText("No tabs open")).toBeInTheDocument(); }); });