Files
AfiS-Aktensystem/packages/db/src/testDatabase.ts
T
Harlekin e0b03ea336
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Gedankenstriche durch Bindestriche ersetzt
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00

45 lines
1.7 KiB
TypeScript

/**
* Tests laufen gegen eine **eigene** Datenbank, nicht gegen die der
* Entwicklung.
*
* Der Grund ist nicht Ordnungsliebe: `CaseEntry`, `CaseEntryVersion` und
* `AuditLog` lassen sich nach Zusicherung 2 der README nicht löschen. Was ein Test
* dort anlegt, bleibt für immer stehen. In einer gemeinsamen Datenbank
* verstopfen die Testakten binnen weniger Läufe die Fallliste, und aufräumen
* lässt sich das nicht mehr.
*
* Ohne `TEST_DATABASE_URL` wird der Name der Entwicklungsdatenbank um `_test`
* ergänzt. Sie liegt also auf demselben Server, aber getrennt.
*/
export function resolveTestDatabaseUrl(source = process.env.DATABASE_URL): string {
const explicit = process.env.TEST_DATABASE_URL
if (explicit) return explicit
if (!source) {
throw new Error('Konfiguration unvollständig: DATABASE_URL oder TEST_DATABASE_URL fehlt')
}
const url = new URL(source)
const name = url.pathname.replace(/^\//, '')
if (!name) throw new Error(`DATABASE_URL nennt keine Datenbank: ${source}`)
if (name.endsWith('_test')) return url.toString()
url.pathname = `/${name}_test`
// pgbouncer im Transaktionsmodus taugt nicht zum Anlegen von Datenbanken
// und nicht für LISTEN. Für Tests wird direkt verbunden.
url.searchParams.delete('pgbouncer')
return url.toString()
}
/**
* Setzt die Umgebung eines Testlaufs auf die Testdatenbank um. Muss laufen,
* bevor irgendein Modul einen Prisma-Client baut - deshalb gehört der Aufruf
* in die `setupFiles` von Vitest, nicht in eine einzelne Testdatei.
*/
export function switchToTestDatabase(): string {
const url = resolveTestDatabaseUrl()
process.env.DATABASE_URL = url
process.env.DIRECT_DATABASE_URL = url
return url
}