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
|
# Ignore test directory media folder/files
|
||||||
/media
|
/media
|
||||||
|
test/media
|
||||||
/versions
|
/versions
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/node,macos,windows,webstorm,sublimetext,visualstudiocode
|
# 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 = {
|
const config: Config = {
|
||||||
db: databaseAdapters[process.env.PAYLOAD_DATABASE || 'mongoose'],
|
db: databaseAdapters[process.env.PAYLOAD_DATABASE || 'mongoose'],
|
||||||
secret: 'TEST_SECRET',
|
secret: 'TEST_SECRET',
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import { type Payload } from 'payload'
|
|||||||
import { wait } from 'payload/utilities'
|
import { wait } from 'payload/utilities'
|
||||||
import { parse } from 'url'
|
import { parse } from 'url'
|
||||||
|
|
||||||
import { startMemoryDB } from '../startMemoryDB.js'
|
|
||||||
import { createTestHooks } from '../testHooks.js'
|
import { createTestHooks } from '../testHooks.js'
|
||||||
|
import { startMemoryDB } from './startMemoryDB.js'
|
||||||
|
|
||||||
type Args = {
|
type Args = {
|
||||||
config: Promise<SanitizedConfig>
|
config: Promise<SanitizedConfig>
|
||||||
@@ -22,18 +22,12 @@ type Result = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function initPayloadE2E({ config, dirname }: Args): Promise<Result> {
|
export async function initPayloadE2E({ config, dirname }: Args): Promise<Result> {
|
||||||
process.env.NODE_OPTIONS = '--no-deprecation'
|
|
||||||
const testSuiteName = dirname.split('/').pop()
|
const testSuiteName = dirname.split('/').pop()
|
||||||
const { beforeTest } = await createTestHooks(testSuiteName)
|
const { beforeTest } = await createTestHooks(testSuiteName)
|
||||||
await beforeTest()
|
await beforeTest()
|
||||||
|
await startMemoryDB()
|
||||||
|
|
||||||
process.env.PAYLOAD_DROP_DATABASE = 'true'
|
const payload = await getPayloadHMR({ config })
|
||||||
|
|
||||||
// @ts-expect-error
|
|
||||||
process.env.NODE_ENV = 'test'
|
|
||||||
|
|
||||||
const configWithMemoryDB = await startMemoryDB(config)
|
|
||||||
const payload = await getPayloadHMR({ config: configWithMemoryDB })
|
|
||||||
|
|
||||||
const port = 3000
|
const port = 3000
|
||||||
process.env.PORT = String(port)
|
process.env.PORT = String(port)
|
||||||
|
|||||||
@@ -2,18 +2,18 @@ import type { SanitizedConfig } from 'payload/config'
|
|||||||
|
|
||||||
import { type Payload, getPayload } from 'payload'
|
import { type Payload, getPayload } from 'payload'
|
||||||
|
|
||||||
import { startMemoryDB } from '../startMemoryDB.js'
|
|
||||||
import { NextRESTClient } from './NextRESTClient.js'
|
import { NextRESTClient } from './NextRESTClient.js'
|
||||||
|
import { startMemoryDB } from './startMemoryDB.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize Payload configured for integration tests
|
* Initialize Payload configured for integration tests
|
||||||
*/
|
*/
|
||||||
export async function initPayloadInt(
|
export async function initPayloadInt(
|
||||||
configPromise: Promise<SanitizedConfig>,
|
config: Promise<SanitizedConfig>,
|
||||||
): Promise<{ config: SanitizedConfig; payload: Payload; restClient: NextRESTClient }> {
|
): Promise<{ config: SanitizedConfig; payload: Payload; restClient: NextRESTClient }> {
|
||||||
const config = await startMemoryDB(configPromise)
|
await startMemoryDB()
|
||||||
const payload = await getPayload({ config })
|
const payload = await getPayload({ config })
|
||||||
const restClient = new NextRESTClient(payload.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