76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
import { beforeEach, describe, expect, test } from "bun:test";
|
|
|
|
import { useSessionManagementStore } from "../src/react-app/domains/session/sidebar/session-management-store";
|
|
|
|
const workspaceId = "workspace-1";
|
|
|
|
function resetStore() {
|
|
useSessionManagementStore.setState({
|
|
pinnedIds: [],
|
|
orderByWorkspace: {},
|
|
groupsByWorkspace: {
|
|
[workspaceId]: {
|
|
groups: [
|
|
{ id: "group-a", label: "Alpha" },
|
|
{ id: "group-b", label: "Beta" },
|
|
],
|
|
assignments: {
|
|
"session-1": "group-a",
|
|
"session-2": "group-a",
|
|
"session-3": "group-b",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
describe("session group management", () => {
|
|
beforeEach(resetStore);
|
|
|
|
test("renames an existing group", () => {
|
|
useSessionManagementStore.getState().renameGroup(workspaceId, "group-a", "Renamed");
|
|
|
|
expect(useSessionManagementStore.getState().groupsByWorkspace[workspaceId]?.groups).toEqual([
|
|
{ id: "group-a", label: "Renamed" },
|
|
{ id: "group-b", label: "Beta" },
|
|
]);
|
|
});
|
|
|
|
test("moves sessions to the selected destination before removing a group", () => {
|
|
useSessionManagementStore.getState().removeGroup(workspaceId, "group-a", "group-b");
|
|
|
|
const workspace = useSessionManagementStore.getState().groupsByWorkspace[workspaceId];
|
|
expect(workspace?.groups).toEqual([{ id: "group-b", label: "Beta" }]);
|
|
expect(workspace?.assignments).toEqual({
|
|
"session-1": "group-b",
|
|
"session-2": "group-b",
|
|
"session-3": "group-b",
|
|
});
|
|
});
|
|
|
|
test("moves sessions to ungrouped before removing a group", () => {
|
|
useSessionManagementStore.getState().removeGroup(workspaceId, "group-a", null);
|
|
|
|
expect(useSessionManagementStore.getState().groupsByWorkspace[workspaceId]?.assignments).toEqual({
|
|
"session-3": "group-b",
|
|
});
|
|
});
|
|
|
|
test("does not publish an equivalent server group snapshot", () => {
|
|
const before = useSessionManagementStore.getState().groupsByWorkspace[workspaceId];
|
|
let notifications = 0;
|
|
const unsubscribe = useSessionManagementStore.subscribe(() => {
|
|
notifications += 1;
|
|
});
|
|
|
|
useSessionManagementStore.getState().replaceWorkspaceGroups(workspaceId, {
|
|
groups: before.groups.map((group) => ({ ...group })),
|
|
assignments: { ...before.assignments },
|
|
});
|
|
|
|
unsubscribe();
|
|
expect(useSessionManagementStore.getState().groupsByWorkspace[workspaceId]).toBe(before);
|
|
expect(notifications).toBe(0);
|
|
});
|
|
});
|