Files
payloadcms/test/plugin-nested-docs/int.spec.ts
2024-03-08 14:42:24 -05:00

110 lines
3.4 KiB
TypeScript

import type {
ArrayField,
RelationshipField,
} from '../../packages/payload/src/fields/config/types.js'
import type { Payload } from '../../packages/payload/src/index.js'
import { getPayload } from '../../packages/payload/src/index.js'
import { startMemoryDB } from '../startMemoryDB.js'
import configPromise from './config.js'
let payload: Payload
describe('@payloadcms/plugin-nested-docs', () => {
beforeAll(async () => {
const config = await startMemoryDB(configPromise)
payload = await getPayload({ config })
})
describe('seed', () => {
it('should populate two levels of breadcrumbs', async () => {
const query = await payload.find({
collection: 'pages',
where: {
slug: {
equals: 'child-page',
},
},
})
expect(query.docs[0].breadcrumbs).toHaveLength(2)
})
it('should populate three levels of breadcrumbs', async () => {
const query = await payload.find({
collection: 'pages',
where: {
slug: {
equals: 'grandchild-page',
},
},
})
expect(query.docs[0].breadcrumbs).toHaveLength(3)
expect(query.docs[0].breadcrumbs[0].url).toStrictEqual('/parent-page')
expect(query.docs[0].breadcrumbs[1].url).toStrictEqual('/parent-page/child-page')
expect(query.docs[0].breadcrumbs[2].url).toStrictEqual(
'/parent-page/child-page/grandchild-page',
)
})
})
describe('overrides', () => {
let collection
beforeAll(() => {
collection = payload.config.collections.find(({ slug }) => slug === 'categories')
})
it('should allow overriding breadcrumbs field', () => {
const breadcrumbField = collection.fields.find(
(field) => field.type === 'array' && field.name === 'categorization',
) as ArrayField
const customField = breadcrumbField.fields.find(
(field) => field.type === 'text' && field.name === 'test',
) as ArrayField
expect(breadcrumbField.admin.description).toStrictEqual('custom')
expect(customField).toBeDefined()
expect(breadcrumbField.admin.readOnly).toStrictEqual(true)
expect(breadcrumbField.admin.readOnly).toStrictEqual(true)
})
it('should allow overriding parent field', () => {
const parentField = collection.fields.find(
(field) => field.type === 'relationship' && field.name === 'owner',
) as RelationshipField
expect(parentField.admin.description).toStrictEqual('custom')
})
it('should allow custom breadcrumb and parent slugs', async () => {
const parent = await payload.create({
collection: 'categories',
data: {
name: 'parent',
},
})
const child = await payload.create({
collection: 'categories',
data: {
name: 'child',
owner: parent.id,
},
})
const grandchild = await payload.create({
collection: 'categories',
data: {
name: 'grandchild',
owner: child.id,
},
})
expect(grandchild.categorization[0].doc).toStrictEqual(parent.id)
expect(grandchild.categorization[0].label).toStrictEqual('parent')
expect(grandchild.categorization[1].doc).toStrictEqual(child.id)
expect(grandchild.categorization[1].label).toStrictEqual('child')
expect(grandchild.categorization[2].label).toStrictEqual('grandchild')
})
})
})