import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it } from "vite-plus/test";
import {
SidebarMenuAction,
SidebarMenuButton,
SidebarMenuSubButton,
SidebarProvider,
SidebarTrigger,
} from "./sidebar";
import { resolveSidebarState } from "./sidebarState";
function renderSidebarButton(className?: string) {
return renderToStaticMarkup(
Projects
,
);
}
describe("sidebar interactive cursors", () => {
it("uses mobile sheet visibility for the shared responsive state", () => {
expect(resolveSidebarState({ isMobile: true, open: true, openMobile: false })).toBe(
"collapsed",
);
expect(resolveSidebarState({ isMobile: true, open: false, openMobile: true })).toBe("expanded");
expect(resolveSidebarState({ isMobile: false, open: true, openMobile: false })).toBe(
"expanded",
);
});
it("exposes collapsed state for shared titlebar inset styling", () => {
const html = renderToStaticMarkup(
,
);
expect(html).toContain('data-sidebar-state="collapsed"');
});
it("keeps the sidebar trigger interactive inside Electron drag regions", () => {
const html = renderToStaticMarkup(
,
);
expect(html).toContain("[-webkit-app-region:no-drag]");
expect(html).toContain("size-[var(--workspace-titlebar-control-size)]!");
});
it("uses a pointer cursor for menu buttons by default", () => {
const html = renderSidebarButton();
expect(html).toContain('data-slot="sidebar-menu-button"');
expect(html).toContain("cursor-pointer");
});
it("lets project drag handles override the default pointer cursor", () => {
const html = renderSidebarButton("cursor-grab");
expect(html).toContain("cursor-grab");
expect(html).not.toContain("cursor-pointer");
});
it("uses a pointer cursor for menu actions", () => {
const html = renderToStaticMarkup(
+
,
);
expect(html).toContain('data-slot="sidebar-menu-action"');
expect(html).toContain("cursor-pointer");
});
it("uses a pointer cursor for submenu buttons", () => {
const html = renderToStaticMarkup(
}>Show more,
);
expect(html).toContain('data-slot="sidebar-menu-sub-button"');
expect(html).toContain("cursor-pointer");
});
});