feat: custom db table and enum names (#5045)
Co-authored-by: Ritsu <enjoythepain1337@gmail.com>
This commit is contained in:
@@ -63,7 +63,98 @@ export default buildConfigWithDefaults({
|
||||
singular: 'Relation B',
|
||||
},
|
||||
},
|
||||
{
|
||||
slug: 'custom-schema',
|
||||
dbName: 'customs',
|
||||
fields: [
|
||||
{
|
||||
name: 'text',
|
||||
type: 'text',
|
||||
},
|
||||
{
|
||||
name: 'localizedText',
|
||||
type: 'text',
|
||||
localized: true,
|
||||
},
|
||||
{
|
||||
name: 'relationship',
|
||||
type: 'relationship',
|
||||
hasMany: true,
|
||||
relationTo: 'relation-a',
|
||||
},
|
||||
{
|
||||
name: 'select',
|
||||
type: 'select',
|
||||
dbName: ({ tableName }) => `${tableName}_customSelect`,
|
||||
enumName: 'selectEnum',
|
||||
hasMany: true,
|
||||
options: ['a', 'b', 'c'],
|
||||
},
|
||||
{
|
||||
name: 'radio',
|
||||
type: 'select',
|
||||
enumName: 'radioEnum',
|
||||
options: ['a', 'b', 'c'],
|
||||
},
|
||||
{
|
||||
name: 'array',
|
||||
type: 'array',
|
||||
dbName: 'customArrays',
|
||||
fields: [
|
||||
{
|
||||
name: 'text',
|
||||
type: 'text',
|
||||
},
|
||||
{
|
||||
name: 'localizedText',
|
||||
type: 'text',
|
||||
localized: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'blocks',
|
||||
type: 'blocks',
|
||||
blocks: [
|
||||
{
|
||||
slug: 'block',
|
||||
dbName: 'customBlocks',
|
||||
fields: [
|
||||
{
|
||||
name: 'text',
|
||||
type: 'text',
|
||||
},
|
||||
{
|
||||
name: 'localizedText',
|
||||
type: 'text',
|
||||
localized: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
versions: true,
|
||||
},
|
||||
],
|
||||
globals: [
|
||||
{
|
||||
slug: 'global',
|
||||
// @ts-expect-error
|
||||
dbName: 'customGlobal',
|
||||
fields: [
|
||||
{
|
||||
name: 'text',
|
||||
type: 'text',
|
||||
},
|
||||
],
|
||||
versions: true,
|
||||
},
|
||||
],
|
||||
localization: {
|
||||
defaultLocale: 'en',
|
||||
locales: ['en', 'es'],
|
||||
},
|
||||
onInit: async (payload) => {
|
||||
await payload.create({
|
||||
collection: 'users',
|
||||
|
||||
@@ -3,6 +3,7 @@ import fs from 'fs'
|
||||
import { GraphQLClient } from 'graphql-request'
|
||||
import path from 'path'
|
||||
|
||||
import type { PostgresAdapter } from '../../packages/db-postgres/src/types'
|
||||
import type { PostgresAdapter } from '../../packages/db-postgres/src/types'
|
||||
import type { TypeWithID } from '../../packages/payload/src/collections/config/types'
|
||||
import type { PayloadRequest } from '../../packages/payload/src/express/types'
|
||||
@@ -14,6 +15,7 @@ import { initTransaction } from '../../packages/payload/src/utilities/initTransa
|
||||
import { devUser } from '../credentials'
|
||||
import { initPayloadTest } from '../helpers/configHelpers'
|
||||
import removeFiles from '../helpers/removeFiles'
|
||||
import { MongooseAdapter } from '../../packages/db-mongodb/src'
|
||||
|
||||
describe('database', () => {
|
||||
let serverURL
|
||||
@@ -140,6 +142,59 @@ describe('database', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('schema', () => {
|
||||
it('should use custom dbNames', () => {
|
||||
expect(payload.db).toBeDefined()
|
||||
|
||||
if (payload.db.name === 'mongoose') {
|
||||
// @ts-expect-error
|
||||
const db: MongooseAdapter = payload.db
|
||||
|
||||
expect(db.collections['custom-schema'].modelName).toStrictEqual('customs')
|
||||
expect(db.versions['custom-schema'].modelName).toStrictEqual('_customs_versions')
|
||||
expect(db.versions.global.modelName).toStrictEqual('_customGlobal_versions')
|
||||
} else {
|
||||
// @ts-expect-error
|
||||
const db: PostgresAdapter = payload.db
|
||||
|
||||
// collection
|
||||
expect(db.tables.customs).toBeDefined()
|
||||
|
||||
// collection versions
|
||||
expect(db.tables._customs_v).toBeDefined()
|
||||
|
||||
// collection relationships
|
||||
expect(db.tables.customs_rels).toBeDefined()
|
||||
|
||||
// collection localized
|
||||
expect(db.tables.customs_locales).toBeDefined()
|
||||
|
||||
// global
|
||||
expect(db.tables.customGlobal).toBeDefined()
|
||||
expect(db.tables._customGlobal_v).toBeDefined()
|
||||
|
||||
// select
|
||||
expect(db.tables.customs_customSelect).toBeDefined()
|
||||
|
||||
// array
|
||||
expect(db.tables.customArrays).toBeDefined()
|
||||
|
||||
// array localized
|
||||
expect(db.tables.customArrays_locales).toBeDefined()
|
||||
|
||||
// blocks
|
||||
expect(db.tables.customBlocks).toBeDefined()
|
||||
|
||||
// localized blocks
|
||||
expect(db.tables.customBlocks_locales).toBeDefined()
|
||||
|
||||
// enum names
|
||||
expect(db.enums.selectEnum).toBeDefined()
|
||||
expect(db.enums.radioEnum).toBeDefined()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('transactions', () => {
|
||||
describe('local api', () => {
|
||||
it('should commit multiple operations in isolation', async () => {
|
||||
|
||||
Reference in New Issue
Block a user