Test Coverage Plans
Baseline: 51.0% total statements (2026-10-03, after PRs #41-#43).
Scope: pgsql, sqlexec, template, plus non-reader/writer packages. Other readers/writers deferred.
Order
| # |
Plan |
Package(s) |
Now |
| 1 |
pgsql.md |
readers/pgsql, writers/pgsql, pkg/pgsql |
92.4 / 86.5 / 87.8 (done, live) |
| 2 |
sqlexec.md |
writers/sqlexec |
99.0 (done, live) |
| 3 |
template.md |
writers/template |
98.9 (done) |
| 4 |
models.md |
pkg/models |
99.1 (done) |
| 5 |
cmd.md |
cmd/relspec, pkg/jobs |
71.3 / 96.6 (done) |
| 6 |
ui.md |
pkg/ui |
69.9 (done) |
| 7 |
diff-merge.md |
pkg/diff, pkg/merge |
92.1 / 98.1 (done) |
| 8 |
sqltypes.md |
pkg/sqltypes |
87.0 (done) |
Beyond the plans (previously deferred)
| Package |
Before |
Now |
| writers/prisma |
2.0 |
96.5 |
| readers/prisma |
37.5 |
97.5 |
| readers/typeorm |
5.5 |
97.0 |
| writers/typeorm |
55.5 |
98.4 |
| writers/drizzle |
49.1 |
92.8 |
| writers/mssql |
38.3 |
89.1 |
| writers/mysql |
49.5 |
89.8 |
| writers/sqlite |
63.2 |
90.1 |
| readers/drizzle |
0 |
77.9 |
| readers/gorm |
65.6 |
88.5 |
| readers/bun |
72.5 |
87.0 |
| writers/gorm |
76.2 |
87.9 |
| writers/bun |
79.3 |
89.6 |
| pkg/writers |
26.6 |
97.2 |
| pkg/transform |
0 |
100.0 |
Conventions
- Same package as code under test; table-driven; must pass
-race.
- Existing data first:
tests/assets/*, examples/*.dbml, tests/postgres/init.sql, tests/postgres/issue21. Generate new data only where listed under "Data needed".
- New fixtures go in
tests/assets/<format>/ or package testdata/.
- Live-DB tests: skip unless the env var is set (pattern in
pkg/readers/pgsql/reader_test.go). Use tests/dbtest/dbtest.sh (podman/docker; see tests/dbtest/README.md):
dbtest.sh up|down <postgres|mssql|mysql|all>
eval "$(dbtest.sh env postgres)" sets RELSPEC_TEST_PG_CONN (mssql: RELSPEC_TEST_MSSQL_CONN, mysql: RELSPEC_TEST_MYSQL_CONN)
dbtest.sh test <db> [pkgs] runs up, go test, down
- Fixtures for live DBs: postgres
tests/postgres/init.sql, mssql test_data/mssql/test_schema.sql, mysql tests/dbtest/init/mysql.sql.
- Prerequisite: working container networking (currently blocked until reboot into matching kernel;
tun module).
- Prefer pure-function tests over DB tests wherever the logic can be isolated.
- Output assertions must not depend on map order (see memory: map iteration determinism).
Targets
| Package |
Target |
| pgsql (all three) |
>= 85 |
| sqlexec |
>= 80 |
| template |
>= 85 |
| models |
>= 80 |
| cmd/relspec |
>= 65 |
| jobs |
>= 85 |
| ui |
>= 40 (data ops/pure helpers; screens via smoke tests) |
| diff, merge |
>= 85 |
| sqltypes |
>= 85 |
Verify
go test -race -coverprofile=c.out ./pkg/<pkg>/ then go tool cover -func=c.out
make test before commit