# Phase 4 Coverage Notes Phase 4 added broad unit coverage plus opt-in integration coverage for database-dependent behavior. ## Default checks These run without MySQL or external services: ```bash go test ./... go vet ./... go test -cover ./... ``` Current default coverage snapshot after Phase 4 implementation: ```text internal/app 61.0% internal/backup 42.3% internal/config 79.5% internal/dbutil 8.6% internal/gitutil 89.3% internal/httputil 100.0% internal/validate 100.0% ``` `cmd/gitocean` remains effectively untestable in-process because `main()` intentionally calls `os.Exit`; command behavior is covered through `internal/app.Run` and CLI helper tests instead. ## Integration checks Integration tests are behind the `integration` build tag and skip unless required environment variables are set: ```bash go test -tags=integration ./... ``` For MySQL-backed tests: ```bash GITOOCEAN_TEST_MYSQL_DSN='user:pass@tcp(127.0.0.1:3306)/gitocean_test?parseTime=true' go test -tags=integration ./... ``` The integration tests refuse to run against a database name that does not contain `test`. ## Intentionally environment-dependent areas The following areas are covered either by opt-in integration tests or by focused wrapper/helper tests rather than exhaustive default unit coverage: - MySQL database auto-creation (`internal/dbutil.OpenMySQLAndCreateDatabaseIfMissing`) - Full migration execution against a real MySQL database - `mysqldump`, `mysql`, and `tar` subprocess backup/restore execution - `git http-backend` CGI execution success paths - Full OS process behavior of `cmd/gitocean/main.go` ## Behavior covered by default tests Default tests now cover: - Validators and reserved names - Client/server config load/save and env overrides - Strict JSON helpers - MySQL identifier quoting and duplicate-column detection - Git utility behavior with temp bare repos - CLI parsing, dispatch errors, human-readable output, and JSON opt-ins - Direct server user management parsing and DB operations - CLI HTTP workflows for auth, repos, PRs, tokens, admin, and storage checks - API auth handlers, token handlers, admin handlers - Repository create/get/search/update/delete/fork/collaborator flows - Permission helpers for public/private/owner/collaborator access - PR list/view/create/close/comment flows - Git path/service parsing, CGI response parsing, and Git HTTP permission denials - PR diff and merge logic using temp Git repositories - Migration statement execution with sqlmock