Persist sidebar collapse state and stabilize Metro port
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user