chore: better pattern for memory db
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,6 +15,7 @@ test-results
|
||||
|
||||
# Ignore test directory media folder/files
|
||||
/media
|
||||
test/media
|
||||
/versions
|
||||
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/node,macos,windows,webstorm,sublimetext,visualstudiocode
|
||||
|
||||
@@ -58,7 +58,17 @@ const databaseAdapters = {
|
||||
},
|
||||
}),
|
||||
}
|
||||
export function buildConfigWithDefaults(testConfig?: Partial<Config>): Promise<SanitizedConfig> {
|
||||
|
||||
export async function buildConfigWithDefaults(
|
||||
testConfig?: Partial<Config>,
|
||||
): Promise<SanitizedConfig> {
|
||||
if (process.env.NODE_ENV === 'test') {
|
||||
databaseAdapters.mongoose = mongooseAdapter({
|
||||
mongoMemoryServer: global._mongoMemoryServer,
|
||||
url: process.env.MONGODB_MEMORY_SERVER_URI,
|
||||
})
|
||||
}
|
||||
|
||||
const config: Config = {
|
||||
db: databaseAdapters[process.env.PAYLOAD_DATABASE || 'mongoose'],
|
||||
secret: 'TEST_SECRET',
|
||||
|
||||
@@ -8,8 +8,8 @@ import { type Payload } from 'payload'
|
||||
import { wait } from 'payload/utilities'
|
||||
import { parse } from 'url'
|
||||
|
||||
import { startMemoryDB } from '../startMemoryDB.js'
|
||||
import { createTestHooks } from '../testHooks.js'
|
||||
import { startMemoryDB } from './startMemoryDB.js'
|
||||
|
||||
type Args = {
|
||||
config: Promise<SanitizedConfig>
|
||||
@@ -22,18 +22,12 @@ type Result = {
|
||||
}
|
||||
|
||||
export async function initPayloadE2E({ config, dirname }: Args): Promise<Result> {
|
||||
process.env.NODE_OPTIONS = '--no-deprecation'
|
||||
const testSuiteName = dirname.split('/').pop()
|
||||
const { beforeTest } = await createTestHooks(testSuiteName)
|
||||
await beforeTest()
|
||||
await startMemoryDB()
|
||||
|
||||
process.env.PAYLOAD_DROP_DATABASE = 'true'
|
||||
|
||||
// @ts-expect-error
|
||||
process.env.NODE_ENV = 'test'
|
||||
|
||||
const configWithMemoryDB = await startMemoryDB(config)
|
||||
const payload = await getPayloadHMR({ config: configWithMemoryDB })
|
||||
const payload = await getPayloadHMR({ config })
|
||||
|
||||
const port = 3000
|
||||
process.env.PORT = String(port)
|
||||
|
||||
@@ -2,18 +2,18 @@ import type { SanitizedConfig } from 'payload/config'
|
||||
|
||||
import { type Payload, getPayload } from 'payload'
|
||||
|
||||
import { startMemoryDB } from '../startMemoryDB.js'
|
||||
import { NextRESTClient } from './NextRESTClient.js'
|
||||
import { startMemoryDB } from './startMemoryDB.js'
|
||||
|
||||
/**
|
||||
* Initialize Payload configured for integration tests
|
||||
*/
|
||||
export async function initPayloadInt(
|
||||
configPromise: Promise<SanitizedConfig>,
|
||||
config: Promise<SanitizedConfig>,
|
||||
): Promise<{ config: SanitizedConfig; payload: Payload; restClient: NextRESTClient }> {
|
||||
const config = await startMemoryDB(configPromise)
|
||||
await startMemoryDB()
|
||||
const payload = await getPayload({ config })
|
||||
const restClient = new NextRESTClient(payload.config)
|
||||
|
||||
return { config, payload, restClient }
|
||||
return { config: payload.config, payload, restClient }
|
||||
}
|
||||
|
||||
21
test/helpers/startMemoryDB.ts
Normal file
21
test/helpers/startMemoryDB.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { MongoMemoryReplSet } from 'mongodb-memory-server'
|
||||
|
||||
export const startMemoryDB = async () => {
|
||||
process.env.NODE_ENV = 'test'
|
||||
process.env.PAYLOAD_DROP_DATABASE = 'true'
|
||||
process.env.NODE_OPTIONS = '--no-deprecation'
|
||||
|
||||
if (
|
||||
(!process.env.PAYLOAD_DATABASE || process.env.PAYLOAD_DATABASE === 'mongoose') &&
|
||||
!global._mongoMemoryServer
|
||||
) {
|
||||
global._mongoMemoryServer = await MongoMemoryReplSet.create({
|
||||
replSet: {
|
||||
count: 3,
|
||||
dbName: 'payloadmemory',
|
||||
},
|
||||
})
|
||||
|
||||
process.env.MONGODB_MEMORY_SERVER_URI = global._mongoMemoryServer.getUri()
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
|
||||
import { mongooseAdapter } from '@payloadcms/db-mongodb'
|
||||
import { MongoMemoryReplSet } from 'mongodb-memory-server'
|
||||
|
||||
import Logger from '../packages/payload/src/utilities/logger.js'
|
||||
|
||||
export const startMemoryDB = async (
|
||||
configPromise: Promise<SanitizedConfig>,
|
||||
): Promise<SanitizedConfig> => {
|
||||
const config = await configPromise
|
||||
|
||||
process.env.NODE_OPTIONS = '--no-deprecation'
|
||||
|
||||
const logger = Logger()
|
||||
|
||||
switch (process.env.PAYLOAD_DATABASE) {
|
||||
case 'postgres':
|
||||
case 'supabase':
|
||||
case 'postgres-uuid': {
|
||||
return config
|
||||
}
|
||||
|
||||
default: {
|
||||
if (!process.env.CI) logger.info('---- CONNECTING TO MEMORY DB ----')
|
||||
const db = await MongoMemoryReplSet.create({
|
||||
replSet: {
|
||||
count: 3,
|
||||
dbName: 'payloadmemory',
|
||||
},
|
||||
})
|
||||
|
||||
config.db = mongooseAdapter({
|
||||
mongoMemoryServer: db,
|
||||
url: db.getUri(),
|
||||
})
|
||||
|
||||
return config
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user