Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
The English summary is being prepared. Showing the original description.
Use when a test needs a database - spin up a dedicated, disposable test database (Testcontainers) seeded with known data, never a shared or production database
The English summary is being prepared. Showing the original description.
Review the instructions the agent will receive before you install.
Automated tests need a database that is real (same engine as production), isolated (no shared state), and seeded with known data. The answer is a disposable, per-run database — Testcontainers spins up a real Postgres in a container, migrated and seeded, torn down after.
Core principle: Real engine, disposable instance, known seed. Never point tests at a shared dev or production database, and never use an in-memory substitute whose SQL differs from production.
| Approach | Problem |
|---|---|
| Shared dev/staging DB | Flaky: other work mutates it; tests collide and depend on order |
| Production DB | Never — data risk, and tests would mutate real records |
| In-memory (H2/SQLite) | Dialect gaps: queries pass in H2, fail on Postgres → bugs ship |
| Disposable real DB (Testcontainers) | ✅ real engine, isolated, reproducible |
postgres:<same-major-as-prod>.@Testcontainers
class TaskExportIT {
@Container static PostgreSQLContainer<?> db =
new PostgreSQLContainer<>("postgres:16");
@BeforeAll static void migrate() { Flyway.configure().dataSource(db.getJdbcUrl(),
db.getUsername(), db.getPassword()).load().migrate(); } // real migrations
@BeforeEach void seed() {
// exactly the rows this scenario needs
insertProject("p1", "Demo");
insertTasks("p1", 3);
}
@Test void export_returns_all_tasks() {
var csv = export("p1");
assertEquals(3, csvRows(csv)); // asserts against the known seed
}
}
Same idea in Go (Testcontainers-Go), Node (testcontainers), etc. — a real Postgres, real migrations, explicit seed.
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
The English summary is being prepared. Showing the original description.
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
The English summary is being prepared. Showing the original description.
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
The English summary is being prepared. Showing the original description.
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
The English summary is being prepared. Showing the original description.
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
The English summary is being prepared. Showing the original description.
Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here
The English summary is being prepared. Showing the original description.