feat(pages): add pages and navigation builder baseline
This commit is contained in:
92
packages/db/src/pages-navigation.test.ts
Normal file
92
packages/db/src/pages-navigation.test.ts
Normal 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)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user