86 lines
2.7 KiB
TypeScript
86 lines
2.7 KiB
TypeScript
import { act, renderHook } from "@testing-library/react";
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { useWorkbenchResponsiveLayout } from "./use-workbench-responsive-layout";
|
|
|
|
function mockViewport(width: number, largeScreen: boolean) {
|
|
Object.defineProperty(window, "innerWidth", {
|
|
configurable: true,
|
|
value: width
|
|
});
|
|
vi.stubGlobal(
|
|
"matchMedia",
|
|
vi.fn().mockImplementation((query: string) => ({
|
|
matches: largeScreen,
|
|
media: query,
|
|
onchange: null,
|
|
addEventListener: vi.fn(),
|
|
removeEventListener: vi.fn(),
|
|
addListener: vi.fn(),
|
|
removeListener: vi.fn(),
|
|
dispatchEvent: vi.fn()
|
|
}))
|
|
);
|
|
}
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
});
|
|
|
|
describe("workbench responsive layout", () => {
|
|
it("coordinates the expanded condition feed with the desktop Agent panel", () => {
|
|
mockViewport(1366, true);
|
|
const collapseAgentPanel = vi.fn();
|
|
const expandAgentPanel = vi.fn();
|
|
const { result } = renderHook(() =>
|
|
useWorkbenchResponsiveLayout({
|
|
activeToolOpen: false,
|
|
agentPanelOpen: true,
|
|
devPanelOpen: false,
|
|
collapseAgentPanel,
|
|
expandAgentPanel,
|
|
onClearActiveTool: vi.fn()
|
|
})
|
|
);
|
|
|
|
expect(result.current.isLargeScreen).toBe(true);
|
|
expect(result.current.shouldShowConditionFeed).toBe(false);
|
|
|
|
act(() => result.current.toggleConditionFeedForViewport());
|
|
expect(result.current.shouldShowConditionFeed).toBe(true);
|
|
|
|
act(() => result.current.handleConditionExpandedChange(true));
|
|
expect(result.current.conditionFeedExpanded).toBe(true);
|
|
expect(collapseAgentPanel).toHaveBeenCalledOnce();
|
|
|
|
act(() => result.current.handleConditionExpandedChange(false));
|
|
expect(result.current.conditionFeedExpanded).toBe(false);
|
|
expect(expandAgentPanel).toHaveBeenCalledOnce();
|
|
});
|
|
|
|
it("toggles the condition sheet without leaking desktop panel state on mobile", () => {
|
|
mockViewport(390, false);
|
|
const onClearActiveTool = vi.fn();
|
|
const { result } = renderHook(() =>
|
|
useWorkbenchResponsiveLayout({
|
|
activeToolOpen: true,
|
|
agentPanelOpen: true,
|
|
devPanelOpen: false,
|
|
collapseAgentPanel: vi.fn(),
|
|
expandAgentPanel: vi.fn(),
|
|
onClearActiveTool
|
|
})
|
|
);
|
|
|
|
act(() => result.current.toggleConditionFeedForViewport());
|
|
expect(result.current.mobileSheet).toBe("condition");
|
|
expect(result.current.mobileSheetSnap).toBe("half");
|
|
expect(onClearActiveTool).toHaveBeenCalledOnce();
|
|
|
|
act(() => result.current.toggleConditionFeedForViewport());
|
|
expect(result.current.mobileSheet).toBeNull();
|
|
|
|
act(() => result.current.openAgentPanelForViewport());
|
|
expect(result.current.mobileSheet).toBe("agent");
|
|
});
|
|
});
|