refactor: simplify workbench layout and browser tests
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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(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");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user