Files
payloadcms/test/buildConfigWithDefaults.ts

177 lines
4.3 KiB
TypeScript

import type { Config, SanitizedConfig } from 'payload'
import {
AlignFeature,
BlockquoteFeature,
BlocksFeature,
BoldFeature,
ChecklistFeature,
HeadingFeature,
IndentFeature,
InlineCodeFeature,
InlineToolbarFeature,
ItalicFeature,
lexicalEditor,
LinkFeature,
OrderedListFeature,
ParagraphFeature,
RelationshipFeature,
StrikethroughFeature,
SubscriptFeature,
SuperscriptFeature,
TreeViewFeature,
UnderlineFeature,
UnorderedListFeature,
UploadFeature,
} from '@payloadcms/richtext-lexical'
// import { slateEditor } from '@payloadcms/richtext-slate'
import { buildConfig } from 'payload'
import { de } from 'payload/i18n/de'
import { en } from 'payload/i18n/en'
import { es } from 'payload/i18n/es'
import sharp from 'sharp'
import { databaseAdapter } from './databaseAdapter.js'
import { reInitEndpoint } from './helpers/reInit.js'
import { localAPIEndpoint } from './helpers/sdk/endpoint.js'
import { testEmailAdapter } from './testEmailAdapter.js'
// process.env.POSTGRES_URL = 'postgres://postgres:postgres@127.0.0.1:5432/payloadtests'
// process.env.PAYLOAD_DATABASE = 'postgres'
// process.env.PAYLOAD_DATABASE = 'sqlite'
export async function buildConfigWithDefaults(
testConfig?: Partial<Config>,
options?: {
disableAutoLogin?: boolean
},
): Promise<SanitizedConfig> {
const config: Config = {
db: databaseAdapter,
editor: lexicalEditor({
features: [
ParagraphFeature(),
RelationshipFeature(),
LinkFeature({
fields: ({ defaultFields }) => [
...defaultFields,
{
name: 'description',
type: 'text',
},
],
}),
ChecklistFeature(),
UnorderedListFeature(),
OrderedListFeature(),
AlignFeature(),
BlockquoteFeature(),
BoldFeature(),
ItalicFeature(),
UploadFeature({
collections: {
media: {
fields: [
{
name: 'alt',
type: 'text',
},
],
},
},
}),
UnderlineFeature(),
StrikethroughFeature(),
SubscriptFeature(),
SuperscriptFeature(),
InlineCodeFeature(),
InlineToolbarFeature(),
TreeViewFeature(),
HeadingFeature(),
IndentFeature(),
BlocksFeature({
blocks: [
{
slug: 'myBlock',
fields: [
{
name: 'someText',
type: 'text',
},
{
name: 'someTextRequired',
type: 'text',
required: true,
},
{
name: 'radios',
type: 'radio',
options: [
{
label: 'Option 1',
value: 'option1',
},
{
label: 'Option 2',
value: 'option2',
},
{
label: 'Option 3',
value: 'option3',
},
],
validate: (value) => {
return value !== 'option2' ? true : 'Cannot be option2'
},
},
],
},
],
}),
],
}),
email: testEmailAdapter,
endpoints: [localAPIEndpoint, reInitEndpoint],
secret: 'TEST_SECRET',
sharp,
telemetry: false,
...testConfig,
i18n: {
supportedLanguages: {
de,
en,
es,
},
...(testConfig?.i18n || {}),
},
typescript: {
declare: {
ignoreTSError: true,
},
...testConfig?.typescript,
},
}
if (!config.admin) {
config.admin = {}
}
if (config.admin.autoLogin === undefined) {
config.admin.autoLogin =
process.env.PAYLOAD_PUBLIC_DISABLE_AUTO_LOGIN === 'true' || options?.disableAutoLogin
? false
: {
email: 'dev@payloadcms.com',
}
}
if (process.env.PAYLOAD_DISABLE_ADMIN === 'true') {
if (typeof config.admin !== 'object') {
config.admin = {}
}
config.admin.disable = true
}
return await buildConfig(config)
}