mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-14 08:26:46 +02:00
86 lines
3.1 KiB
TypeScript
86 lines
3.1 KiB
TypeScript
// @vitest-environment jsdom
|
|
|
|
import { beforeEach, describe, expect, it } from "vitest";
|
|
import {
|
|
classifyShellRoute,
|
|
getCompanyPathSegments,
|
|
readContextualSidebarOrigin,
|
|
rememberContextualSidebarOrigin,
|
|
} from "./shell-navigation";
|
|
|
|
describe("shell navigation", () => {
|
|
beforeEach(() => window.sessionStorage.clear());
|
|
|
|
it("classifies task detail independently from list routes", () => {
|
|
expect(classifyShellRoute("/PAP/issues", "PAP").isTaskDetail).toBe(false);
|
|
expect(classifyShellRoute("/PAP/issues/task-1", "PAP").isTaskDetail).toBe(true);
|
|
});
|
|
|
|
it("classifies the built-in contextual surfaces", () => {
|
|
expect(classifyShellRoute("/PAP/company/settings/secrets", "PAP").builtInContextualSurface).toBe("settings");
|
|
expect(classifyShellRoute("/PAP/company/export", "PAP").builtInContextualSurface).toBe("settings");
|
|
expect(classifyShellRoute("/PAP/apps/connections", "PAP").builtInContextualSurface).toBe("apps");
|
|
expect(classifyShellRoute("/PAP/tools/runtime", "PAP").builtInContextualSurface).toBe("apps");
|
|
expect(classifyShellRoute("/PAP/agents/agent-1/instructions", "PAP").builtInContextualSurface).toBe("agent");
|
|
expect(classifyShellRoute("/PAP/agents/agent-1/runs/run-1", "PAP").builtInContextualSurface).toBe("agent");
|
|
expect(classifyShellRoute("/PAP/routines/routine-1/overview", "PAP").builtInContextualSurface).toBe("routine");
|
|
expect(classifyShellRoute("/PAP/skills", "PAP").builtInContextualSurface).toBe("skills");
|
|
expect(classifyShellRoute("/PAP/skills/studio/skill-1", "PAP").builtInContextualSurface).toBe("skills");
|
|
});
|
|
|
|
it("keeps Agent and Routine collection routes in the global shell", () => {
|
|
for (const pathname of [
|
|
"/PAP/agents",
|
|
"/PAP/agents/all",
|
|
"/PAP/agents/active",
|
|
"/PAP/agents/paused",
|
|
"/PAP/agents/error",
|
|
"/PAP/agents/builtin",
|
|
"/PAP/agents/new",
|
|
"/PAP/routines",
|
|
]) {
|
|
expect(classifyShellRoute(pathname, "PAP").builtInContextualSurface).toBeNull();
|
|
}
|
|
});
|
|
|
|
it("rejects a different company prefix", () => {
|
|
expect(getCompanyPathSegments("/OTHER/issues/task-1", "PAP")).toEqual([]);
|
|
});
|
|
|
|
it("remembers only safe same-company origins", () => {
|
|
rememberContextualSidebarOrigin({
|
|
surface: "settings",
|
|
companyPrefix: "PAP",
|
|
previousPathname: "/PAP/issues/task-1",
|
|
});
|
|
expect(readContextualSidebarOrigin({
|
|
surface: "settings",
|
|
companyPrefix: "PAP",
|
|
fallbackTo: "/dashboard",
|
|
})).toBe("/PAP/issues/task-1");
|
|
|
|
rememberContextualSidebarOrigin({
|
|
surface: "settings",
|
|
companyPrefix: "PAP",
|
|
previousPathname: "/OTHER/dashboard",
|
|
});
|
|
expect(readContextualSidebarOrigin({
|
|
surface: "settings",
|
|
companyPrefix: "PAP",
|
|
fallbackTo: "/dashboard",
|
|
})).toBe("/PAP/issues/task-1");
|
|
});
|
|
|
|
it("falls back when storage contains an unsafe path", () => {
|
|
window.sessionStorage.setItem(
|
|
"paperclip.contextualSidebar.origin:PAP:settings",
|
|
"/OTHER/company/settings",
|
|
);
|
|
expect(readContextualSidebarOrigin({
|
|
surface: "settings",
|
|
companyPrefix: "PAP",
|
|
fallbackTo: "/dashboard",
|
|
})).toBe("/dashboard");
|
|
});
|
|
});
|