PR Q: E2E Testcontainers integration suite #21
Reference in New Issue
Block a user
Delete Branch "devin/1776882556-pr-q-e2e"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes gap-analysis v2 §7.8 (no E2E tests vs a live Postgres/Chain-138 node) / §10.8 (Jest + Testcontainers scaffolding).
What
tests/e2e/transactionLifecycle.e2e.test.ts— real-Postgres E2E suite via@testcontainers/postgresql. Brings uppostgres:15-alpine, appliesschema.sqlthrough pg's simple-query protocol (so the$$-dollar-quoted function bodies in the schema survive — the naive semicolon splitter in001_initial_schema.tsbreaks on them), then migrations 002/003/004. Exercises the plans HTTP endpoint, the signed event bus hash chain, and the idempotency_keys table against the live container.jest.e2e.config.js— dedicated config fortests/e2e/with a 120s timeout. The defaultjest.config.jsnow ignores/e2e/sonpm teststays <5s and doesn't require Docker.package.json—npm run test:e2e(setsRUN_E2E=1).devDependencies—testcontainers+@testcontainers/postgresql..github/workflows/ci.yml— addsorchestrator-test(tsc + jest unit) andorchestrator-e2e(gated on therun-e2ePR label or any push tomain).Safety
The suite is gated on
RUN_E2E=1. Without it the describe block isdescribe.skip-ed, so CI environments or dev machines without Docker don't fail. A guard test asserts the skip invariant so nobody accidentally deletes the opt-in.Follow-ups (intentionally out-of-scope)
GenericContainerrunning the hardhat node.Verification
Closes gap-analysis v2 §7.8 (no E2E vs live Postgres / §10.8 (Testcontainers opt-in suite). - tests/e2e/transactionLifecycle.e2e.test.ts — Postgres-backed E2E suite via @testcontainers/postgresql. Brings up a real postgres:15 container, applies schema.sql (via pg simple-query protocol so $$ function bodies survive) + migrations 002/003/004, wires the plans endpoints against it, and asserts: * POST /api/plans persists and reads back * eventBus.publish produces a hash-chained pair with verifyChain returning ok * idempotency_keys row insertion round-trips - jest.e2e.config.js — dedicated config for tests/e2e/ with 120s timeout; default jest.config.js now ignores /e2e/ so `npm test` stays fast (<5s) and doesn't require Docker. - package.json — adds 'npm run test:e2e' (sets RUN_E2E=1). - devDependencies — testcontainers + @testcontainers/postgresql. - Suite gates on `RUN_E2E=1`. Without it the describe block is skipped, so CI environments without Docker don't fail; a guard test asserts the skip invariant. - .github/workflows/ci.yml — adds orchestrator-test (tsc + jest) and orchestrator-e2e (gated on the 'run-e2e' PR label or any push to main). - Verification: npx tsc --noEmit clean npm test (unit) 7 suites, 80/80 passing npm run test:e2e 1 suite, 4/4 passing (docker up)