memos/web/tests/view-context-columns.test.tsx
johnnyjoygh 6fbc81337f chore(sidebar): improve view and tag controls
- expose display settings from the Views header and refine layout controls
- add explicit tag list/tree navigation with accessible expansion behavior
- cover view persistence, menu behavior, and tag tree construction
2026-08-05 23:12:49 +08:00

55 lines
1.8 KiB
TypeScript

import { act, renderHook } from "@testing-library/react";
import type { ReactNode } from "react";
import { beforeEach, describe, expect, it } from "vitest";
import { useView, ViewProvider } from "@/contexts/ViewContext";
const LOCAL_STORAGE_KEY = "memos-view-setting";
const wrapper = ({ children }: { children: ReactNode }) => <ViewProvider>{children}</ViewProvider>;
const persisted = () => JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY) ?? "{}");
describe("ViewContext maxColumns setting", () => {
beforeEach(() => {
localStorage.clear();
});
it("defaults to a single column", () => {
const { result } = renderHook(() => useView(), { wrapper });
expect(result.current.maxColumns).toBe(1);
});
it("updates and persists the column ceiling", () => {
const { result } = renderHook(() => useView(), { wrapper });
act(() => result.current.setMaxColumns(0));
expect(result.current.maxColumns).toBe(0);
expect(persisted().maxColumns).toBe(0);
});
it("sets and persists the sort direction explicitly", () => {
const { result } = renderHook(() => useView(), { wrapper });
act(() => result.current.setOrderByTimeAsc(true));
expect(result.current.orderByTimeAsc).toBe(true);
expect(persisted().orderByTimeAsc).toBe(true);
});
it("restores a persisted column count on init", () => {
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify({ maxColumns: 2 }));
const { result } = renderHook(() => useView(), { wrapper });
expect(result.current.maxColumns).toBe(2);
});
it("falls back to a single column for an invalid persisted value", () => {
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify({ maxColumns: 7 }));
const { result } = renderHook(() => useView(), { wrapper });
expect(result.current.maxColumns).toBe(1);
});
});