Files
household-bot/docs/runbooks/e2e-tests.md
whekin 3675079a4c fix(review): address CodeRabbit review feedback
- Guard prepare script for Docker builds without .git
- Add pre-push hook for heavier quality gates (typecheck/test/build)
- Pin drizzle-orm version in scripts/package.json
- Add E2E_SMOKE_ALLOW_WRITE opt-in guard via e2eEnv abstraction
- Create @household/config env-e2e.ts using same t3-env + zod pattern
- Make e2e teardown robust with optional chaining + allSettled
- Fix markdown code block language identifier (MD040)
- Fix CI integration docs to reflect actual workflow
2026-03-05 21:13:38 +04:00

1.8 KiB

End-to-End Smoke Tests

Overview

The scripts/e2e/billing-flow.ts script runs a deterministic end-to-end smoke test for the billing pipeline. It exercises:

  • Purchase ingestion from a simulated topic message
  • Utility bill entry via bot commands
  • Monthly statement generation and balance verification

Prerequisites

  • Bun 1.3+ installed
  • A running Supabase/Postgres database with the schema applied
  • DATABASE_URL set (via .env or environment)
  • E2E_SMOKE_ALLOW_WRITE=true set explicitly (safety guard)

Running locally

# 1. Ensure .env has a valid DATABASE_URL
cp .env.example .env
# edit .env with real DATABASE_URL

# 2. Apply database migrations
bun run db:migrate

# 3. Run the e2e smoke test
E2E_SMOKE_ALLOW_WRITE=true bun run test:e2e

The test seeds its own data (household + 3 roommates), runs the full purchase → utility → statement flow, asserts deterministic totals, and cleans up after itself.

Expected output

On success:

E2E smoke passed: purchase ingestion, utility updates, and statements are deterministic

On failure the script exits with code 1 and prints the assertion error.

CI integration

Run the e2e smoke test with bun run test:e2e locally or in a dedicated CI job. If you wire it into CI, gate it on DATABASE_URL and E2E_SMOKE_ALLOW_WRITE to avoid false failures. The test is not part of the standard CI quality matrix by default.

Test data

The test creates temporary records with random UUIDs:

Entity Details
Household "E2E Smoke Household"
Alice Admin, telegram ID 900001
Bob Member, telegram ID 900002
Carol Member, telegram ID 900003

All test data is cleaned up in a finally block via cascade delete on the household row.