64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
vi.mock("@react-native-async-storage/async-storage", () => ({
|
|
default: {
|
|
getItem: vi.fn(async () => null),
|
|
setItem: vi.fn(),
|
|
removeItem: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
import { useSidebarCollapsedSectionsStore } from "@/stores/sidebar-collapsed-sections-store";
|
|
|
|
describe("sidebar-collapsed-sections-store", () => {
|
|
beforeEach(() => {
|
|
useSidebarCollapsedSectionsStore.setState({
|
|
collapsedProjectKeys: new Set(),
|
|
});
|
|
});
|
|
|
|
it("tracks collapsed project keys as a Set", () => {
|
|
const store = useSidebarCollapsedSectionsStore.getState();
|
|
|
|
store.setProjectCollapsed("project-a", true);
|
|
store.toggleProjectCollapsed("project-b");
|
|
store.toggleProjectCollapsed("project-a");
|
|
|
|
expect(Array.from(useSidebarCollapsedSectionsStore.getState().collapsedProjectKeys)).toEqual([
|
|
"project-b",
|
|
]);
|
|
});
|
|
|
|
it("serializes collapsed project keys for preference storage", () => {
|
|
useSidebarCollapsedSectionsStore.setState({
|
|
collapsedProjectKeys: new Set(["project-a", "project-b"]),
|
|
});
|
|
|
|
const partialize = useSidebarCollapsedSectionsStore.persist.getOptions().partialize;
|
|
|
|
expect(partialize?.(useSidebarCollapsedSectionsStore.getState())).toEqual({
|
|
collapsedProjectKeys: ["project-a", "project-b"],
|
|
});
|
|
});
|
|
|
|
it("restores collapsed project keys from persisted preferences", () => {
|
|
const merge = useSidebarCollapsedSectionsStore.persist.getOptions().merge;
|
|
const restored = merge?.(
|
|
{
|
|
collapsedProjectKeys: ["project-a", "project-b", 42],
|
|
},
|
|
useSidebarCollapsedSectionsStore.getState(),
|
|
);
|
|
|
|
expect(Array.from(restored?.collapsedProjectKeys ?? [])).toEqual(["project-a", "project-b"]);
|
|
});
|
|
|
|
it("keeps the existing state object when persisted preferences do not change collapsed keys", () => {
|
|
const merge = useSidebarCollapsedSectionsStore.persist.getOptions().merge;
|
|
const currentState = useSidebarCollapsedSectionsStore.getState();
|
|
|
|
expect(merge?.({}, currentState)).toBe(currentState);
|
|
expect(merge?.({ collapsedProjectKeys: [] }, currentState)).toBe(currentState);
|
|
});
|
|
});
|