nimiq-vitepress-theme
Version:
Nimiq UI theme for VitePress
61 lines (60 loc) • 2.08 kB
JavaScript
import { useData } from "vitepress";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { useSecondarySidebar } from "../useSecondarySidebar.mjs";
vi.mock("vitepress", () => ({
useData: vi.fn(),
useRoute: vi.fn(() => ({}))
}));
vi.mock("@vueuse/core", () => ({
createSharedComposable: (fn) => fn,
useScroll: vi.fn(() => ({ y: { value: 0 } })),
useThrottleFn: vi.fn((fn) => fn)
}));
vi.mock("vue", () => ({
computed: vi.fn((fn) => ({ value: fn() })),
nextTick: vi.fn(),
onMounted: vi.fn((fn) => fn()),
ref: vi.fn((val) => ({ value: val })),
watch: vi.fn()
}));
describe("useSecondarySidebar", () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe("layout behavior", () => {
it("should hide sidebar for home layout", () => {
vi.mocked(useData).mockReturnValue({
frontmatter: { value: { layout: "home" } }
});
const { showSecondarySidebar, showOutline, showWidget } = useSecondarySidebar();
expect(showSecondarySidebar.value).toBe(false);
expect(showOutline.value).toBe(false);
expect(showWidget.value).toBe(false);
});
it("should show sidebar for docs layout", () => {
vi.mocked(useData).mockReturnValue({
frontmatter: { value: { layout: "docs" } }
});
const { showSecondarySidebar, showOutline, showWidget } = useSecondarySidebar();
expect(showSecondarySidebar.value).toBe(true);
expect(showOutline.value).toBe(false);
expect(showWidget.value).toBe(true);
});
it("should respect explicit frontmatter settings regardless of layout", () => {
vi.mocked(useData).mockReturnValue({
frontmatter: {
value: {
layout: "home",
secondarySidebar: true,
outline: true,
widget: true
}
}
});
const { showSecondarySidebar, showOutline, showWidget } = useSecondarySidebar();
expect(showSecondarySidebar.value).toBe(true);
expect(showOutline.value).toBe(true);
expect(showWidget.value).toBe(true);
});
});
});