import { test } from 'node:test' import assert from 'node:assert/strict' import { mkdtempSync, writeFileSync, readFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join, resolve } from 'node:path' import { spawnSync } from 'node:child_process' import { loadConfigFromFile } from '@prisma/config' test('patched merger loads Prisma configuration and applies migrations idempotently', async () => { const dir = mkdtempSync(join(tmpdir(), 'syncova-prisma-compat-')) const schema = resolve('prisma/schema.prisma') const configFile = join(dir, 'prisma.config.cjs') writeFileSync(configFile, 'module.exports = ' + JSON.stringify({ schema, migrations: { path: resolve('prisma/migrations') }, })) const loaded = await loadConfigFromFile({ configRoot: dir, configFile }) assert.equal(loaded.error, undefined) assert.equal(loaded.config?.schema, schema) const env = { ...process.env, DATABASE_URL: 'file:' + join(dir, 'migration.db').split('\\').join('/') } for (let run = 0; run < 2; run++) { const result = spawnSync(process.execPath, [ 'node_modules/prisma/build/index.js', 'migrate', 'deploy', '--schema', schema, ], { env, encoding: 'utf8', timeout: 60000 }) assert.equal(result.status, 0, result.stderr + result.stdout) } const backup = join(dir, 'backup.db') const restored = join(dir, 'restored.db') for (const args of [['backup', backup], ['restore', backup, restored], ['verify', restored]]) { const result = spawnSync(process.execPath, ['scripts/database-backup.js', ...args], { env, encoding: 'utf8', timeout: 60000 }) assert.equal(result.status, 0, result.stderr + result.stdout) } assert.deepEqual(readFileSync(backup), readFileSync(restored)) const overwrite = spawnSync(process.execPath, ['scripts/database-backup.js', 'restore', backup, restored], { env, encoding: 'utf8' }) assert.equal(overwrite.status, 1) assert.match(overwrite.stderr, /refusing to overwrite/) })