/** * Ask Leo borrows the primary sidebar's width. The contract worth pinning is the * handback: a rail that was collapsed before Leo must still be collapsed after, * because an expanded primary makes the secondary scope rail compact itself and * the user loses the rail they were reading. */ import { render, screen } from "@testing-library/react" import { describe, expect, it } from "vitest" import { SidebarProvider, useSidebar } from "@/components/ui/sidebar" import { useBorrowedPrimarySidebar } from "./use-borrowed-primary-sidebar" function Probe({ borrowing }: { borrowing: boolean }) { useBorrowedPrimarySidebar(borrowing) const { state } = useSidebar() return {state} } const primary = () => screen.getByTestId("primary").textContent function mount(defaultOpen: boolean) { return render( , ) } function setBorrowing(rerender: ReturnType["rerender"], defaultOpen: boolean, borrowing: boolean) { rerender( , ) } describe("useBorrowedPrimarySidebar", () => { it("collapses while borrowing and stays collapsed for a rail that was already collapsed", () => { const { rerender } = mount(false) expect(primary()).toBe("collapsed") setBorrowing(rerender, false, true) expect(primary()).toBe("collapsed") setBorrowing(rerender, false, false) expect(primary()).toBe("collapsed") }) it("gives an expanded rail back expanded", () => { const { rerender } = mount(true) expect(primary()).toBe("expanded") setBorrowing(rerender, true, true) expect(primary()).toBe("collapsed") setBorrowing(rerender, true, false) expect(primary()).toBe("expanded") }) it("leaves the saved preference alone", () => { document.cookie = "sidebar_state_v2=true; path=/" const { rerender } = mount(true) setBorrowing(rerender, true, true) expect(primary()).toBe("collapsed") expect(document.cookie).toContain("sidebar_state_v2=true") setBorrowing(rerender, true, false) expect(document.cookie).toContain("sidebar_state_v2=true") }) })