Commit 0ae43b4
authored
[test-improver] Improve tests for version package (#4140)
## Test Improvements: `version_test.go`
## File Analyzed
- **Test File**: `internal/version/version_test.go`
- **Package**: `internal/version`
- **Lines of Code**: 85 → 144 (+59 lines)
## Improvements Made
### 1. Increased Coverage
- ✅ Added `TestBuildVersionString` with 8 subtests covering all
explicit-parameter branches of `BuildVersionString`
- **Previous Coverage**: 12% (only `Set` and `Get` were tested;
`BuildVersionString` had 0%)
- **New Coverage**: 72%
- **Improvement**: +60%
### 2. Better Testing Patterns
- ✅ Used `t.Run` subtests for each logical scenario in
`TestBuildVersionString`
- ✅ Used `assert.Equal` for deterministic cases (all three parameters
supplied)
- ✅ Used `strings.HasPrefix` / `strings.HasSuffix` / `assert.Contains`
for partially-deterministic cases where the `debug.ReadBuildInfo()`
fallback may or may not append extra fields
- ✅ Added `require.GreaterOrEqual` to guard against panics when
splitting output into parts
### 3. Branches Covered
| Branch | Covered? | Notes |
|---|---|---|
| `mainVersion != ""` → use mainVersion | ✅ | Deterministic |
| `mainVersion == ""` → use `"dev"` | ✅ | Deterministic |
| `gitCommit != ""` → use `"commit: <gitCommit>"` | ✅ | Deterministic |
| `gitCommit == ""` → fall back to `debug.ReadBuildInfo()` vcs.revision
| ✅ (entry)| Inner body not coverable in unit tests (no embedded VCS
metadata) |
| `buildDate != ""` → use `"built: <buildDate>"` | ✅ | Deterministic |
| `buildDate == ""` → fall back to `debug.ReadBuildInfo()` vcs.time | ✅
(entry) | Inner body not coverable in unit tests |
| explicit `gitCommit` is not truncated (truncation only in fallback) |
✅ | Documents the truncation behaviour contract |
The remaining uncovered lines (~32% of `BuildVersionString`) are the
loop bodies that match `vcs.revision`/`vcs.time` settings inside
`debug.ReadBuildInfo()`; these are only populated when the binary is
built with embedded VCS metadata via `go build -ldflags` and cannot be
exercised in unit tests.
## Test Execution
All tests pass:
```
=== RUN TestBuildVersionString
=== RUN TestBuildVersionString/all_fields_provided
=== RUN TestBuildVersionString/empty_mainVersion_uses_dev_prefix
=== RUN TestBuildVersionString/mainVersion_and_gitCommit_without_buildDate
=== RUN TestBuildVersionString/mainVersion_and_buildDate_without_gitCommit
=== RUN TestBuildVersionString/only_mainVersion
=== RUN TestBuildVersionString/all_empty_uses_dev
=== RUN TestBuildVersionString/result_is_comma-separated
=== RUN TestBuildVersionString/explicit_gitCommit_is_not_truncated
--- PASS: TestBuildVersionString (0.00s)
PASS
coverage: 72.0% of statements
ok github.com/github/gh-aw-mcpg/internal/version 0.004s
```
## Why These Changes?
`BuildVersionString` constructs the version string displayed in health
checks, `--version` output, and MCP client metadata. It had zero test
coverage despite having six distinct branches. The new tests document
the function's contract for all explicitly-supplied-parameter paths and
confirm stability across builds where `debug.ReadBuildInfo()` may or may
not provide VCS metadata.
---
*Generated by Test Improver Workflow*
*Focuses on better patterns, increased coverage, and more stable tests*
> Generated by [Test
Improver](https://github.com/github/gh-aw-mcpg/actions/runs/24628026201/agentic_workflow)
· ● 972.4K ·
[◷](https://github.com/search?q=repo%3Agithub%2Fgh-aw-mcpg+%22gh-aw-workflow-id%3A+test-improver%22&type=pullrequests)
<!-- gh-aw-agentic-workflow: Test Improver, engine: copilot, model:
auto, id: 24628026201, workflow_id: test-improver, run:
https://github.com/github/gh-aw-mcpg/actions/runs/24628026201 -->
<!-- gh-aw-workflow-id: test-improver -->1 file changed
Lines changed: 59 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| 8 | + | |
7 | 9 | | |
8 | 10 | | |
9 | 11 | | |
| |||
57 | 59 | | |
58 | 60 | | |
59 | 61 | | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
60 | 119 | | |
61 | 120 | | |
62 | 121 | | |
| |||
0 commit comments