Files
relspecgo/tests/_plans

Test Coverage Plans

Baseline: 51.0% total statements (2026-10-03, after PRs #41-#43). Now: 80.0% total (no live DBs). All 8 plans done; most deferred readers/writers covered. Scope: pgsql, sqlexec, template, plus non-reader/writer packages.

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
pkg/updatecheck (new, #32) - 100.0
cmd/relspec update (new, #32) - tested

Remaining

  • writers/dctx (77.1): WriteDatabase, WriteTable, mapDataType.
  • Live DB (need containers): readers/mssql (2.6), readers/mysql (2.5), readers/pgsql (19.0 without DB), writers/sqlexec (24.3 without DB), live MSSQL execute path.
  • Untested: NSIS script windows/installer.nsi (needs makensis / Windows).
  • drawdb, dbml, graphql, json, yaml, drizzle reader: 77-87, above target but not specifically planned.

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