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
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die README; an keiner Stelle Bedeutung, nur Zeichensetzung.
45 lines
1.7 KiB
TypeScript
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
|
|
}
|