syncova-policies/tests/unit/prisma-compat.test.ts
Weapie 265ca8ac38
All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 5m15s
Improve accessibility and access controls; verify production and database recovery
2026-09-14 11:44:41 +02:00

37 lines
1.9 KiB
TypeScript

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/)
})