Files
payload/test/database/up-down-migration/int.spec.ts
Sasha f310c90211 fix(db-postgres): down migration fails because migrationTableExists doesn't check in the current transaction (#11910)
Fixes https://github.com/payloadcms/payload/issues/11882

Previously, down migration that dropped the `payload_migrations` table
was failing because `migrationTableExists` doesn't check the current
transaction, only in which you can get a `false` value result.
2025-04-03 02:33:34 +03:00

59 lines
1.6 KiB
TypeScript

/* eslint-disable jest/require-top-level-describe */
import { existsSync, rmdirSync, rmSync } from 'fs'
import path from 'path'
import { buildConfig, getPayload } from 'payload'
import { fileURLToPath } from 'url'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
const describe =
process.env.PAYLOAD_DATABASE === 'postgres' ? global.describe : global.describe.skip
const clearMigrations = () => {
if (existsSync(path.resolve(dirname, 'migrations'))) {
rmSync(path.resolve(dirname, 'migrations'), { force: true, recursive: true })
}
}
describe('SQL migrations', () => {
// If something fails - an error will be thrown.
// eslint-disable-next-line jest/expect-expect
it('should up and down migration successfully', async () => {
clearMigrations()
const { databaseAdapter } = await import(path.resolve(dirname, '../../databaseAdapter.js'))
const init = databaseAdapter.init
// set options
databaseAdapter.init = ({ payload }) => {
const adapter = init({ payload })
adapter.migrationDir = path.resolve(dirname, 'migrations')
adapter.push = false
return adapter
}
const config = await buildConfig({
db: databaseAdapter,
secret: 'secret',
collections: [
{
slug: 'users',
auth: true,
fields: [],
},
],
})
const payload = await getPayload({ config })
await payload.db.createMigration({ payload })
await payload.db.migrate()
await payload.db.migrateDown()
await payload.db.dropDatabase({ adapter: payload.db as any })
await payload.db.destroy?.()
})
})