import { render, screen } from "@testing-library/react"; import { afterEach, describe, expect, it, vi } from "vitest"; import type { BrowserNodeHostApi } from "@tutti-os/browser-node"; import type { BrowserNodeWorkbenchHeaderProps } from "@tutti-os/browser-node/react"; import type { I18nRuntime } from "@tutti-os/ui-i18n-runtime"; import { AgentToolBrowserPanel, type AgentToolBrowserController } from "./AgentToolBrowserPanel.tsx"; const browserNodeMocks = vi.hoisted(() => ({ headerProps: null as BrowserNodeWorkbenchHeaderProps | null })); vi.mock("@tutti-os/browser-node/react", () => ({ BrowserNode: () =>
, BrowserNodeWorkbenchHeader: (props: BrowserNodeWorkbenchHeaderProps) => { browserNodeMocks.headerProps = props; return (
{props.defaultActions}
{props.navigationActions}
); } })); describe("AgentToolBrowserPanel header composition", () => { afterEach(() => { browserNodeMocks.headerProps = null; }); it("composes host window actions into the browser tab header", async () => { render( Window actions} dragHandleProps={{ "aria-label": "Browser drag handle" }} hidden={false} i18n={{ t: (key) => key } as I18nRuntime} navigationActions={} /> ); await vi.dynamicImportSettled(); expect( await screen.findByLabelText("Browser drag handle") ).toBeInTheDocument(); expect(screen.getByText("Window actions")).toBeInTheDocument(); expect(screen.getByText("Navigation action")).toBeInTheDocument(); expect(browserNodeMocks.headerProps?.defaultActions).not.toBeNull(); expect( document.querySelectorAll('[data-browser-node-header="true"]') ).toHaveLength(1); }); it("activates an existing page by URL through the host controller", async () => { let controller: AgentToolBrowserController | null = null; render(