memos/web/tests/memo-display-setting-menu.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

56 lines
2.1 KiB
TypeScript

import { fireEvent, render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import MemoDisplaySettingMenu from "@/components/MemoDisplaySettingMenu";
import { ViewProvider } from "@/contexts/ViewContext";
vi.mock("@/utils/i18n", () => ({
useTranslate: () => (key: string, params?: Record<string, number>) => {
const labels: Record<string, string> = {
"common.created-at": "Created",
"common.last-updated-at": "Last updated",
"memo.compact-mode": "Compact mode",
"memo.direction": "Direction",
"memo.grid-compact-hint": "Grid layouts always use compact cards.",
"memo.layout": "Layout",
"memo.layout-auto": "Auto",
"memo.layout-auto-description": "As many columns as fit",
"memo.layout-columns-description": `Up to ${params?.n ?? ""} columns`,
"memo.layout-list": "List",
"memo.layout-list-description": "A single column",
"memo.link-preview": "Link preview",
"memo.newest-first": "Newest first",
"memo.oldest-first": "Oldest first",
"memo.order": "Order",
"memo.order-by": "Order by",
"memo.view-options": "View options",
};
if (key === "memo.layout-columns") return `${params?.n ?? ""} columns`;
return labels[key] ?? key;
},
}));
describe("MemoDisplaySettingMenu", () => {
beforeEach(() => {
localStorage.clear();
});
it("opens from an accessible trigger and explains the compact grid constraint", () => {
render(
<ViewProvider>
<MemoDisplaySettingMenu />
</ViewProvider>,
);
fireEvent.click(screen.getByRole("button", { name: "View options" }));
const compactMode = screen.getByRole("switch", { name: "Compact mode" });
expect(compactMode).not.toBeChecked();
expect(compactMode).toBeEnabled();
fireEvent.click(screen.getByRole("radio", { name: "2 columns" }));
expect(compactMode).toBeChecked();
expect(compactMode).toHaveAttribute("aria-disabled", "true");
expect(screen.getByText("Grid layouts always use compact cards.")).toBeInTheDocument();
});
});