test(#139): improve cmd/review-bot coverage from 44.6% to 49.3% #140
Reference in New Issue
Block a user
Delete Branch "issue-139"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Closes #139. Adds 7 tests covering previously uncovered paths in
cmd/review-bot.Problem
cmd/review-bothad 44.6% coverage. Three specific files had untested branches:validateurl.go: nil input toisValidateError, empty-host URL, success pathmain.go: deprecatedGITEA_URLenv fallback, missing--llm-base-urlfor openai, missing aicore creds, conflicting persona flagsChanges
validateurl_test.go(3 new tests)TestIsValidateError_Nil— confirmsisValidateError(nil, &ve)returnsfalse(nil branch)TestValidateURL_EmptyHost—https://has no hostname; confirms code-2 error with "no host" messageTestRunValidateURL_Success— exercises the success path: valid public URL →"OK: ... is safe"on stdout, exit 0. Requires DNS; skips if unavailable.main_test.go(4 new subprocess tests)TestMainSubprocess_MissingLLMBaseURL—--llm-base-urlrequired forprovider=openaiTestMainSubprocess_MissingAICoreCredentials— aicore credentials required forprovider=aicoreTestMainSubprocess_ConflictingPersonaFlags—--personaand--persona-fileare mutually exclusiveTestMainSubprocess_DeprecatedGiteaURLEnv—GITEA_URLenv var emits deprecation warning (backward compat)Result
cmd/review-botChecklist
go test ./... -count=1passesgo vet ./...cleanscripts/check-deps.shclean (no new deps)Self-review against
d75e737f07Assessment: ✅ Clean
Self-Review: issue-139 — 2026-05-15
Verdict: PASS
No issues found — ready for human review.
Coherence: Single purpose (improve coverage). Each test targets a specific previously-uncovered path. No scope creep — tests only, no production changes.
Fit: All tests follow existing patterns exactly (subprocess
TEST_SUBPROCESS_MAINpattern, buffer capture for writers,t.Skipffor network-dependent tests). Naming consistent with existingTestMainSubprocess_*andTestValidate*conventions.Solution: Pre-validation in
TestRunValidateURL_Successcorrectly mirrorsTestValidateURL_BlockedPrivateIP's skip-on-DNS-fail approach.TestMainSubprocess_DeprecatedGiteaURLEnvignores exit code intentionally — subprocess fails (no real server) but the deprecation warning must still appear in output.cleanEnv()stripsGITEA_URL(HasPrefix match), so the injected value is clean.Completeness: 7 tests covering 7 uncovered paths. Coverage: 44.6% → 49.3%.
go test ./...,go vet ./..., andscripts/check-deps.shall clean.Security Review
Summary
This PR adds only test code to improve coverage, with no production changes. The tests follow safe practices (e.g., environment sanitization) and do not introduce security risks.
Recommendation
APPROVE — CI has passed and the changes are limited to tests exercising error paths and configuration validation. There are no security-relevant issues introduced by these tests. Approve as submitted.
Review by security
Evaluated against
d75e737fSonnet Review
Summary
This PR adds 7 tests to improve coverage of
cmd/review-botfrom 44.6% to 49.3%. The tests follow existing patterns in the codebase well, CI is passing, and the code is idiomatic Go. No production code is changed.Findings
cmd/review-bot/validateurl_test.gocmd/review-bot/main_test.goout, _ := cmd.CombinedOutput(). All other subprocess tests in this file captureout, err := cmd.CombinedOutput()and check err (or intentionally assert on it). The deprecation test explicitly doesn't need a non-zero exit assertion, but discarding the error silently is inconsistent with the rest of the file. Considerout, _ := cmd.CombinedOutput()with a comment, or just accept and ignore the error explicitly://nolintor a comment explaining why it's intentionally ignored.Recommendation
APPROVE — Approve. The tests are well-structured, follow the existing subprocess test pattern established in the file, use t.Skip correctly for network-dependent tests, and the
cleanEnv()helper is used consistently. CI passes. The two minor findings are non-blocking style observations — discarding the error in the deprecated env test is slightly inconsistent but causes no correctness issues since the test only cares about the output content, not the exit code.Review by sonnet
Evaluated against
d75e737f@@ -1386,0 +1484,4 @@// No --vcs-url: should fall back to GITEA_URL env var"--repo", "owner/repo","--pr", "1","--reviewer-token", "tok",[MINOR] TestMainSubprocess_DeprecatedGiteaURLEnv ignores the error return from cmd.CombinedOutput() with
out, _ := cmd.CombinedOutput(). All other subprocess tests in this file captureout, err := cmd.CombinedOutput()and check err (or intentionally assert on it). The deprecation test explicitly doesn't need a non-zero exit assertion, but discarding the error silently is inconsistent with the rest of the file. Considerout, _ := cmd.CombinedOutput()with a comment, or just accept and ignore the error explicitly://nolintor a comment explaining why it's intentionally ignored.@@ -128,0 +153,4 @@}}// TestRunValidateURL_Success confirms that a resolvable public URL prints "OK" and returns 0.[MINOR] TestRunValidateURL_Success calls validateURL directly as a pre-check, which means the actual DNS resolution happens twice (once in the pre-check, once in runValidateURL). This is not a bug, but it's slightly inconsistent with the pattern in TestValidateURL_BlockedPrivateIP which calls validateURL once and inspects the result. More critically, if validateURL passes the pre-check but the network state changes between the two calls (unlikely in practice), the test could produce a confusing failure. Using t.Skip based on a simple net.LookupHost check might be slightly cleaner, but the current approach is not wrong.
Gpt Review
Summary
Well-structured test additions that increase coverage without touching production code. Subprocess tests follow the existing pattern, environment isolation is handled, and validateurl tests guard against network variability with skips.
Recommendation
APPROVE — The added tests are idiomatic, focused, and align with repository conventions (no new deps, errors checked, subprocess isolation). The validateurl success-path test prudently skips in no-network environments. Overall, this improves coverage on important edge cases (flag validation, deprecated env fallback, URL validation). No changes requested.
Review by gpt
Evaluated against
d75e737f