From a0f60184692f396843453ffebb713b4ec8fd104f Mon Sep 17 00:00:00 2001 From: James Date: Mon, 1 Apr 2024 14:36:08 -0400 Subject: [PATCH] chore: better pattern for memory db --- .gitignore | 1 + test/buildConfigWithDefaults.ts | 12 +++++++++- test/helpers/initPayloadE2E.ts | 12 +++------- test/helpers/initPayloadInt.ts | 8 +++---- test/helpers/startMemoryDB.ts | 21 +++++++++++++++++ test/startMemoryDB.ts | 41 --------------------------------- tsconfig.json | 2 +- 7 files changed, 41 insertions(+), 56 deletions(-) create mode 100644 test/helpers/startMemoryDB.ts delete mode 100644 test/startMemoryDB.ts diff --git a/.gitignore b/.gitignore index 54311a34d6..8e224c1b49 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/test/buildConfigWithDefaults.ts b/test/buildConfigWithDefaults.ts index 28668ff856..63c98ee051 100644 --- a/test/buildConfigWithDefaults.ts +++ b/test/buildConfigWithDefaults.ts @@ -58,7 +58,17 @@ const databaseAdapters = { }, }), } -export function buildConfigWithDefaults(testConfig?: Partial): Promise { + +export async function buildConfigWithDefaults( + testConfig?: Partial, +): Promise { + 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', diff --git a/test/helpers/initPayloadE2E.ts b/test/helpers/initPayloadE2E.ts index ea35ff2f4b..1a3585513b 100644 --- a/test/helpers/initPayloadE2E.ts +++ b/test/helpers/initPayloadE2E.ts @@ -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 @@ -22,18 +22,12 @@ type Result = { } export async function initPayloadE2E({ config, dirname }: Args): Promise { - 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) diff --git a/test/helpers/initPayloadInt.ts b/test/helpers/initPayloadInt.ts index 2ee2331326..0fd352968a 100644 --- a/test/helpers/initPayloadInt.ts +++ b/test/helpers/initPayloadInt.ts @@ -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, + config: Promise, ): 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 } } diff --git a/test/helpers/startMemoryDB.ts b/test/helpers/startMemoryDB.ts new file mode 100644 index 0000000000..1e3b9918d9 --- /dev/null +++ b/test/helpers/startMemoryDB.ts @@ -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() + } +} diff --git a/test/startMemoryDB.ts b/test/startMemoryDB.ts deleted file mode 100644 index e446430a48..0000000000 --- a/test/startMemoryDB.ts +++ /dev/null @@ -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, -): Promise => { - 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 - } - } -} diff --git a/tsconfig.json b/tsconfig.json index 51ba1562d6..217f2bd790 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -160,4 +160,4 @@ ".next/types/**/*.ts", "scripts/**/*.ts" ] -} +} \ No newline at end of file