feat(pages): add pages and navigation builder baseline

This commit is contained in:
2026-02-12 19:30:09 +01:00
parent 7d9bc9dca9
commit 281b1d7a1b
15 changed files with 1372 additions and 16 deletions

View File

@@ -0,0 +1,92 @@
import { beforeEach, describe, expect, it, vi } from "vitest"
const { mockDb } = vi.hoisted(() => ({
mockDb: {
page: {
create: vi.fn(),
update: vi.fn(),
delete: vi.fn(),
findUnique: vi.fn(),
findMany: vi.fn(),
},
navigationMenu: {
create: vi.fn(),
findMany: vi.fn(),
},
navigationItem: {
create: vi.fn(),
update: vi.fn(),
delete: vi.fn(),
},
},
}))
vi.mock("./client", () => ({
db: mockDb,
}))
import {
createNavigationItem,
createNavigationMenu,
createPage,
updatePage,
} from "./pages-navigation"
describe("pages-navigation service", () => {
beforeEach(() => {
for (const value of Object.values(mockDb)) {
for (const fn of Object.values(value)) {
if (typeof fn === "function") {
fn.mockReset()
}
}
}
})
it("creates published pages with publishedAt", async () => {
mockDb.page.create.mockResolvedValue({ id: "page-1" })
await createPage({
title: "About",
slug: "about",
status: "published",
content: "hello",
})
expect(mockDb.page.create).toHaveBeenCalledTimes(1)
expect(mockDb.page.create.mock.calls[0]?.[0].data.publishedAt).toBeInstanceOf(Date)
})
it("updates page status publication timestamp", async () => {
mockDb.page.update.mockResolvedValue({ id: "page-1" })
await updatePage({
id: "550e8400-e29b-41d4-a716-446655440000",
status: "draft",
})
expect(mockDb.page.update).toHaveBeenCalledTimes(1)
expect(mockDb.page.update.mock.calls[0]?.[0].data.publishedAt).toBeNull()
})
it("creates menus and items with schema parsing", async () => {
mockDb.navigationMenu.create.mockResolvedValue({ id: "menu-1" })
mockDb.navigationItem.create.mockResolvedValue({ id: "item-1" })
await createNavigationMenu({
name: "Primary",
slug: "primary",
location: "header",
})
await createNavigationItem({
menuId: "550e8400-e29b-41d4-a716-446655440001",
label: "Home",
href: "/",
sortOrder: 0,
})
expect(mockDb.navigationMenu.create).toHaveBeenCalledTimes(1)
expect(mockDb.navigationItem.create).toHaveBeenCalledTimes(1)
})
})