Re-enables BDD_SCHEMA_ISOLATION=true with the foundation from PR #34
(NewPostgresRepositoryFromDSN). Achieves ~2.85x speedup on the BDD
test suite by running feature packages in parallel.
ARCHITECTURE
When BDD_SCHEMA_ISOLATION=true, each test package (process) gets its
own isolated PostgreSQL schema:
1. testserver.Start() generates a deterministic schema name per FEATURE
2. CREATE SCHEMA <name>
3. Open a per-package gorm.DB with DSN search_path=<name>
4. AutoMigrate runs in the isolated schema (creates users table)
5. Build a per-package server.Server with this isolated repo via
server.NewServerWithUserRepo
6. Stop() drops the schema + closes the per-package pool
Packages then run in parallel (default Go test parallelism) without
contention because each has its own schema + connection pool.
CHANGES
- pkg/server/server.go : NEW factory NewServerWithUserRepo(cfg, ctx,
userRepo, userService) that injects a per-test repo. Existing NewServer
becomes a thin wrapper.
- pkg/bdd/testserver/server.go : Start() chooses isolated mode based on
BDD_SCHEMA_ISOLATION env var. Stop() drops schema + closes pool.
- pkg/user/postgres_repository.go : Exec(sql) helper for the schema
lifecycle (CREATE/DROP) used by testserver.
- scripts/run-bdd-tests.sh : -p 1 only when BDD_SCHEMA_ISOLATION!=true.
When true, default Go parallelism (~ NumCPU packages concurrent).
- .gitea/workflows/ci-cd.yaml : exports BDD_SCHEMA_ISOLATION=true.
- adr/0025-bdd-scenario-isolation-strategies.md : Status to "Implemented".
VALIDATION
5x AuthBDD with isolation: 5/5 PASS, public.users count=0 after runs.
Local benchmark on the full features/... suite:
- Sequential -p 1 (no isolation): 12.87s
- Parallel + isolation (this PR): 4.51s
- Speedup: 2.85x
🤖 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tag 3 untagged v2 scenarios + extend DEFAULT_TAGS to exclude @v2. Companion to PR #26 (BDD_SCHEMA_ISOLATION). Together should produce green CI on default daily runs.
Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
Finalize BDD testing framework with:
- Unified step definitions using StepContext struct
- Proper server verification in theServerIsRunning step
- Robust JSON response handling with escaping and newline trimming
- Updated documentation reflecting current implementation
- Test validation script to ensure test quality
- All tests passing with proper black box testing
Key files updated:
- pkg/bdd/steps/steps.go: Unified step definitions
- pkg/bdd/testserver/client.go: Robust response validation
- pkg/bdd/README.md: Godog pattern guide
- doc/BDD_GUIDE.md: Updated usage guide
- adr/0008-bdd-testing.md: Updated ADR with current approach
- scripts/run-bdd-tests.sh: Test validation script
The BDD framework is now production-ready with comprehensive
documentation and proper testing practices.