diff --git a/test/_community/e2e.spec.ts b/test/_community/e2e.spec.ts index f8e9ded62..4df3db52b 100644 --- a/test/_community/e2e.spec.ts +++ b/test/_community/e2e.spec.ts @@ -6,7 +6,7 @@ import { fileURLToPath } from 'url' import { initPageConsoleErrorCatch } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) @@ -16,7 +16,7 @@ test.describe('Admin Panel', () => { let url: AdminUrlUtil test.beforeAll(async ({ browser }) => { - const { payload, serverURL } = await initPayloadE2E({ dirname }) + const { payload, serverURL } = await initPayloadE2ENoConfig({ dirname }) url = new AdminUrlUtil(serverURL, 'posts') const context = await browser.newContext() diff --git a/test/buildConfigWithDefaults.ts b/test/buildConfigWithDefaults.ts index df86abb19..21437777c 100644 --- a/test/buildConfigWithDefaults.ts +++ b/test/buildConfigWithDefaults.ts @@ -29,47 +29,48 @@ import { import { type Config, buildConfig } from 'payload/config' import sharp from 'sharp' -import { getDBAdapter } from './getDBAdapter.js' import { reInitEndpoint } from './helpers/reInit.js' import { localAPIEndpoint } from './helpers/sdk/endpoint.js' // process.env.PAYLOAD_DATABASE = 'postgres' -const databaseAdapters = { - mongodb: mongooseAdapter({ - url: process.env.DATABASE_URI || 'mongodb://127.0.0.1/payloadtests', - }), - postgres: postgresAdapter({ - pool: { - connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests', - }, - }), - 'postgres-custom-schema': postgresAdapter({ - pool: { - connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests', - }, - schemaName: 'custom', - }), - 'postgres-uuid': postgresAdapter({ - idType: 'uuid', - pool: { - connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests', - }, - }), - supabase: postgresAdapter({ - pool: { - connectionString: - process.env.POSTGRES_URL || 'postgresql://postgres:postgres@127.0.0.1:54322/postgres', - }, - }), -} - export async function buildConfigWithDefaults( testConfig?: Partial, ): Promise { - const adapter = await getDBAdapter() + console.log('MEMORY URI', process.env.MONGODB_MEMORY_SERVER_URI) + const databaseAdapters = { + mongodb: mongooseAdapter({ + url: + process.env.MONGODB_MEMORY_SERVER_URI || + process.env.DATABASE_URI || + 'mongodb://127.0.0.1/payloadtests', + }), + postgres: postgresAdapter({ + pool: { + connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests', + }, + }), + 'postgres-custom-schema': postgresAdapter({ + pool: { + connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests', + }, + schemaName: 'custom', + }), + 'postgres-uuid': postgresAdapter({ + idType: 'uuid', + pool: { + connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests', + }, + }), + supabase: postgresAdapter({ + pool: { + connectionString: + process.env.POSTGRES_URL || 'postgresql://postgres:postgres@127.0.0.1:54322/postgres', + }, + }), + } const config: Config = { - db: adapter || databaseAdapters[process.env.PAYLOAD_DATABASE || 'mongodb'], + db: databaseAdapters[process.env.PAYLOAD_DATABASE || 'mongodb'], secret: 'TEST_SECRET', //editor: slateEditor({}), // editor: slateEditor({ diff --git a/test/helpers/initPayloadE2E.ts b/test/helpers/initPayloadE2E.ts index 659cbf990..9ce6981ca 100644 --- a/test/helpers/initPayloadE2E.ts +++ b/test/helpers/initPayloadE2E.ts @@ -18,11 +18,6 @@ type Result = { } export async function initPayloadE2E({ dirname }: Args): Promise { - // @ts-expect-error - process.env.NODE_ENV = 'test' - process.env.NODE_OPTIONS = '--no-deprecation' - process.env.PAYLOAD_DROP_DATABASE = 'true' - const testSuiteName = dirname.split('/').pop() const { beforeTest } = await createTestHooks(testSuiteName) await beforeTest() diff --git a/test/helpers/initPayloadE2ENoConfig.ts b/test/helpers/initPayloadE2ENoConfig.ts index a8cd561e7..b95a11f22 100644 --- a/test/helpers/initPayloadE2ENoConfig.ts +++ b/test/helpers/initPayloadE2ENoConfig.ts @@ -21,11 +21,6 @@ type Result> = { export async function initPayloadE2ENoConfig>({ dirname, }: Args): Promise> { - // @ts-expect-error - process.env.NODE_ENV = 'test' - process.env.NODE_OPTIONS = '--no-deprecation' - process.env.PAYLOAD_DROP_DATABASE = 'true' - const testSuiteName = dirname.split('/').pop() const { beforeTest } = await createTestHooks(testSuiteName) await beforeTest() diff --git a/test/helpers/initPayloadInt.ts b/test/helpers/initPayloadInt.ts index 8355d10cf..a75586326 100644 --- a/test/helpers/initPayloadInt.ts +++ b/test/helpers/initPayloadInt.ts @@ -10,11 +10,6 @@ import { NextRESTClient } from './NextRESTClient.js' export async function initPayloadInt( config: Promise, ): Promise<{ config: SanitizedConfig; payload: Payload; restClient: NextRESTClient }> { - // @ts-expect-error - process.env.NODE_ENV = 'test' - process.env.NODE_OPTIONS = '--no-deprecation' - process.env.PAYLOAD_DROP_DATABASE = 'true' - const payload = await getPayload({ config }) const restClient = new NextRESTClient(payload.config) diff --git a/test/jest.config.js b/test/jest.config.js index 41f2102af..ffc6eef5b 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -1,3 +1,9 @@ +import path from 'path' +import { fileURLToPath } from 'url' + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) + /** @type {import('jest').Config} */ const customJestConfig = { extensionsToTreatAsEsm: ['.ts', '.tsx'], @@ -10,6 +16,7 @@ const customJestConfig = { }, reporters: ['default', ['github-actions', { silent: false }], 'summary'], testEnvironment: 'node', + globalSetup: path.resolve(dirname, 'setup.ts'), testMatch: ['/**/*int.spec.ts'], testTimeout: 90000, transform: { diff --git a/test/playwright.config.ts b/test/playwright.config.ts index 85218d8ab..c142aa333 100644 --- a/test/playwright.config.ts +++ b/test/playwright.config.ts @@ -1,4 +1,9 @@ import { defineConfig } from '@playwright/test' +import path from 'path' +import { fileURLToPath } from 'url' + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) export const EXPECT_TIMEOUT = 45000 export const POLL_TOPASS_TIMEOUT = EXPECT_TIMEOUT * 4 // That way expect.poll() or expect().toPass can retry 4 times. 4x higher than default expect timeout => can retry 4 times if retryable expects are used inside @@ -13,6 +18,7 @@ export default defineConfig({ trace: 'retain-on-failure', video: 'retain-on-failure', }, + globalSetup: path.resolve(dirname, 'setup.js'), expect: { timeout: EXPECT_TIMEOUT, }, diff --git a/test/setup.js b/test/setup.js new file mode 100644 index 000000000..368d92cb5 --- /dev/null +++ b/test/setup.js @@ -0,0 +1,23 @@ +import { MongoMemoryReplSet } from 'mongodb-memory-server' + +// eslint-disable-next-line no-restricted-exports +export default async () => { + // @ts-expect-error + 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/tsconfig.json b/test/tsconfig.json index 97e889a12..f1e621546 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -41,6 +41,6 @@ } }, "exclude": ["dist", "build", "node_modules", ".eslintrc.js", "dist/**/*.js", "**/dist/**/*.js"], - "include": ["./**/*.ts", ".next/types/**/*.ts"], + "include": ["./**/*.ts", ".next/types/**/*.ts", "setup.js"], "references": [] } diff --git a/tsconfig.json b/tsconfig.json index 51ba1562d..217f2bd79 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -160,4 +160,4 @@ ".next/types/**/*.ts", "scripts/**/*.ts" ] -} +} \ No newline at end of file