Files
openwork/apps/app/tests/session-management-store.test.ts

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);
});
});