You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Multi-environment isolation** — separate databases, schemas, and users for Dev, Test, Staging, and Prod
22
23
-**Automated data testing** — 85 assertions across 5 SQL test suites, all written in pure PostgreSQL
24
+
-**Data-driven evals** — 23 offline CSV validator scenarios plus PostgreSQL-backed idempotency and full-suite checks
23
25
24
26
All names (database, schema, users, every table) are controlled by a single `\set` configuration block at the top of each environment file. Rename anything in one place and the entire script updates automatically.
25
27
@@ -84,6 +86,12 @@ PostgreDataMigrationApp/
84
86
│ ├── run_all_tests.sql ← Master test orchestrator
The `evals/` package complements the SQL and unit tests with scenario fixtures and expected JSON outputs.
405
+
406
+
| Tier | What it validates | Database required? |
407
+
|---|---|---|
408
+
| P |`csv/validator.py` across 23 CSV edge cases, including malformed rows, BOM, CRLF, Unicode, quoted newlines, long fields, missing env vars, and invalid UTF-8 bytes | No |
409
+
| I | Dev deployment idempotency by deploying twice and comparing seed row counts | Yes |
410
+
| S | Fresh Dev deploy followed by the full SQL suite, expecting all 85 assertions to pass | Yes |
411
+
412
+
Run examples:
413
+
414
+
```powershell
415
+
python evals\runner.py # Tier P only
416
+
python evals\runner.py --tiers p,i,s # all tiers; I/S skip if PostgreSQL is unavailable
417
+
python evals\runner.py --only 14_quoted_newline --tiers p
418
+
```
419
+
420
+
Each eval run writes a JSON report under `evals/reports/<run_id>/summary.json`; that folder is intentionally gitignored.
0 commit comments