Version 1.0.0 — Freigabe für den Echtbetrieb (#17)
Pruefung / pruefung (push) Canceled after 0s
Pruefung / oberflaeche (push) Canceled after 0s

This commit was merged in pull request #17.
This commit is contained in:
2026-09-06 20:08:16 +00:00
parent 14cc4de9b8
commit 3b20abcb23
11 changed files with 799 additions and 30 deletions
+8 -4
View File
@@ -77,11 +77,15 @@ afterAll(async () => {
// Protokollzeilen lassen sich nicht loeschen — die Trigger sitzen auf
// den Tabellen. Fuer das Aufraeumen der Testdaten werden sie kurz
// abgeschaltet; im Betrieb passiert das nie.
await tx.$executeRawUnsafe('ALTER TABLE "druckmessung" DISABLE TRIGGER USER');
await tx.$executeRawUnsafe('ALTER TABLE "atemschutz_ereignis" DISABLE TRIGGER USER');
// Trigger fuer das Aufraeumen stilllegen — sitzungslokal.
//
// NICHT ueber `ALTER TABLE ... DISABLE TRIGGER`: das ist eine
// Schemaänderung und gilt fuer alle. Vitest faehrt die Testdateien
// parallel, und waehrend hier abgeraeumt wurde, pruefte anderswo
// eine Datei, dass genau dieser Trigger greift — und sah keinen.
// `session_replication_role` wirkt nur in dieser Transaktion.
await tx.$executeRawUnsafe("SET LOCAL session_replication_role = 'replica'");
await tx.organisation.deleteMany({ where: { slug: SLUG } });
await tx.$executeRawUnsafe('ALTER TABLE "druckmessung" ENABLE TRIGGER USER');
await tx.$executeRawUnsafe('ALTER TABLE "atemschutz_ereignis" ENABLE TRIGGER USER');
});
}
await Promise.allSettled([app.$disconnect(), system.$disconnect()]);
+8 -5
View File
@@ -81,12 +81,15 @@ afterAll(async () => {
if (erreichbar) {
await system.$transaction(async (tx) => {
await tx.$executeRaw`SELECT set_config('app.audit_bereinigung', 'an', true)`;
// Der Unveränderlichkeits-Trigger sitzt auf ki_vorgang. Für das
// Aufräumen der Testdaten wird er kurz abgeschaltet; im Betrieb
// passiert das nie.
await tx.$executeRawUnsafe('ALTER TABLE "ki_vorgang" DISABLE TRIGGER USER');
// Trigger fuer das Aufraeumen stilllegen — sitzungslokal.
//
// NICHT ueber `ALTER TABLE ... DISABLE TRIGGER`: das ist eine
// Schemaänderung und gilt fuer alle. Vitest faehrt die Testdateien
// parallel, und waehrend hier abgeraeumt wurde, pruefte anderswo
// eine Datei, dass genau dieser Trigger greift — und sah keinen.
// `session_replication_role` wirkt nur in dieser Transaktion.
await tx.$executeRawUnsafe("SET LOCAL session_replication_role = 'replica'");
await tx.organisation.deleteMany({ where: { slug: SLUG } });
await tx.$executeRawUnsafe('ALTER TABLE "ki_vorgang" ENABLE TRIGGER USER');
});
}
await Promise.allSettled([app.$disconnect(), system.$disconnect()]);
+19 -7
View File
@@ -43,6 +43,15 @@ beforeAll(async () => {
return;
}
// Erst aufraeumen, dann anlegen.
//
// Aufraeumen nur am Ende reicht nicht: bricht ein Lauf ab — abgebrochene
// Sitzung, Fehler in einer anderen Datei, geschlossenes Terminal —, bleiben
// die Datensaetze stehen und der naechste Lauf scheitert an einer
// Eindeutigkeit, die mit dem Geprueften nichts zu tun hat. Das kostet dann
// zehn Minuten Fehlersuche an der falschen Stelle.
await aufraeumen();
const a = await system.organisation.upsert({
where: { slug: SLUG_A },
update: {},
@@ -91,14 +100,17 @@ beforeAll(async () => {
konto = benutzer.id;
});
/** Alles entfernen, was dieser Test anlegt. */
async function aufraeumen(): Promise<void> {
await system.$transaction(async (tx) => {
await tx.$executeRaw`SELECT set_config('app.audit_bereinigung', 'an', true)`;
await tx.benutzer.deleteMany({ where: { email: { endsWith: "@test-mandant.de" } } });
await tx.organisation.deleteMany({ where: { slug: { in: [SLUG_A, SLUG_B] } } });
});
}
afterAll(async () => {
if (erreichbar) {
await system.$transaction(async (tx) => {
await tx.$executeRaw`SELECT set_config('app.audit_bereinigung', 'an', true)`;
await tx.benutzer.deleteMany({ where: { email: { endsWith: "@test-mandant.de" } } });
await tx.organisation.deleteMany({ where: { slug: { in: [SLUG_A, SLUG_B] } } });
});
}
if (erreichbar) await aufraeumen();
await system.$disconnect();
});