Files
paseo/packages/app/src/plugins/sidebar-groups.test.ts
T
Mohamed Boudra 6f2195904b fix(subscriptions): isolate observers and silence unrequested feeds (#4596)
Give each observation a server-issued ID owned by its physical connection. Preserve snapshot-only reads and combined list-and-subscribe, source-bound replies, lifecycle cleanup and legacy wire compatibility.
2026-09-11 08:07:35 +02:00

57 lines
1.6 KiB
TypeScript

import { QueryClient } from "@tanstack/react-query";
import { describe, expect, it } from "vitest";
import type { InstalledPlugin } from "./types";
import { groupPluginSidebarContributions } from "./sidebar-groups";
function installed(serverId: string, contributionId = "main"): InstalledPlugin {
return {
id: "example",
cleanup: () => undefined,
serverId,
clientBundle: serverId,
lifetime: new AbortController(),
queryClient: new QueryClient(),
settingsScreens: [],
surfaces: [{ id: "surface", Component: () => null }],
sidebarItems: [
{
id: contributionId,
title: "Example",
icon: "Blocks",
surface: "surface",
},
],
workspacePanels: [],
commandCenterItems: [],
clientSlashCommands: [],
attachmentSources: [],
themes: [],
timelineTransformers: [],
timelineRenderers: [],
};
}
describe("groupPluginSidebarContributions", () => {
it("coalesces the same plugin contribution across hosts", () => {
const groups = groupPluginSidebarContributions([installed("host-a"), installed("host-b")]);
expect(groups).toHaveLength(1);
expect(groups[0]?.targets.map((target) => target.plugin.serverId)).toEqual([
"host-a",
"host-b",
]);
});
it("keeps different contribution ids separate", () => {
const groups = groupPluginSidebarContributions([
installed("host-a", "main"),
installed("host-b", "settings"),
]);
expect(groups.map((group) => group.key)).toEqual([
"example/sidebar/main",
"example/sidebar/settings",
]);
});
});