test: Backend-e2e in CI stabil (eigene Jahre, Sperren, ein Server je App)
Backend E2E / e2e (push) Failing after 7m26s
Backend Image / build-and-push (push) Failing after 4m20s
Frontend Image / build-and-push (push) Successful in 15m44s

- daily-evaluation nutzt die Jahre 2011/2012 statt 2001, damit der Job nicht
  die Daten von autopilot und reminders liest und verändert.
- throttler: app.listen(0) einmal je App statt eines Servers je Anfrage
  (ECONNRESET bei 40 parallelen Anfragen).
- outbox-claims: 120 s Zeitlimit für 2000 sequentielle Anweisungen.
- migration-harness: eine `migrate deploy` zur Zeit über eine eigene
  Advisory-Sperre (P1002 bei parallelen Migrations-Suites).
- authority-notices und authority-notices-herd laufen über
  exclusive-suite nacheinander; Herd-Wiederholung räumt eigene Entwürfe.

Refs #32

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick.RosenloecherandClaude Opus 5.5 committed 2026-10-16 16:55:56 +02:00
1 parent 258e90828f
commit 6edae3efec
7 files changed
+217 -140

No files matched your search

@@ -6,6 +6,7 @@ import { loadHerdApiaryRows } from '../src/compliance/herd-snapshot';
import { PrismaService } from '../src/prisma/prisma.service';
import { login } from './utils/api';
import { createTestApp } from './utils/create-test-app';
import { acquireExclusive, EXCLUSIVE_KEYS } from './utils/exclusive-suite';
interface NoticeBody {
id: string;
@@ -38,7 +39,11 @@ describe('Authority notices (e2e)', () => {
const nextKey = () =>
`notices-e2e-${suffix}-${(keyCounter += 1).toString().padStart(4, '0')}`;
let releaseExclusive: () => Promise<void>;
beforeAll(async () => {
// Suites that clear or create the global open notice drafts take turns.
releaseExclusive = await acquireExclusive(EXCLUSIVE_KEYS.authorityNotices);
app = await createTestApp();
prisma = app.get(PrismaService);
const passwordHash = await bcrypt.hash(password, 12);
@@ -99,6 +104,7 @@ describe('Authority notices (e2e)', () => {
await prisma.user.deleteMany({ where: { roleId: noRightsRoleId } });
await prisma.role.deleteMany({ where: { id: noRightsRoleId } });
await app.close();
await releaseExclusive();
});
async function livingCount(): Promise<number> {