Files
relspecgo/tests/_plans/README.md
T

81 lines
3.5 KiB
Markdown

# 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](pgsql.md) | readers/pgsql, writers/pgsql, pkg/pgsql | 92.4 / 86.5 / 87.8 (done, live) |
| 2 | [sqlexec.md](sqlexec.md) | writers/sqlexec | 99.0 (done, live) |
| 3 | [template.md](template.md) | writers/template | 98.9 (done) |
| 4 | [models.md](models.md) | pkg/models | 99.1 (done) |
| 5 | [cmd.md](cmd.md) | cmd/relspec, pkg/jobs | 71.3 / 96.6 (done) |
| 6 | [ui.md](ui.md) | pkg/ui | 69.9 (done) |
| 7 | [diff-merge.md](diff-merge.md) | pkg/diff, pkg/merge | 92.1 / 98.1 (done) |
| 8 | [sqltypes.md](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