test(coverage): add unit tests across all packages; remove dead code
ci / vet, staticcheck, test, build (push) Successful in 2m25s
ci / vet, staticcheck, test, build (push) Successful in 2m25s
- Added comprehensive table-driven test suites for all packages: cmd/glint, cicontext, fetcher, graph, linter, model, resolver. Coverage reaches 98%+ statement coverage across the codebase. - Replaced os.Exit calls in cmd/glint with an `exit` variable so tests can capture exit codes without terminating the test process. - Removed unreachable code found during coverage analysis: dead guard in cicontext.parseRegexLiteral; dead len(jobs)==0 branch in graph.Pipeline; skipWin struct field and dead continue in graph.convertToPNG; pipelineSVG return type simplified to string. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package linter
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.k3nny.fr/glint/internal/model"
|
||||
)
|
||||
|
||||
// TestCheckNeeds_StageOrder verifies that a job needing a job in a later stage
|
||||
// produces RuleNeedsStageOrder (line 64-76 in needs.go).
|
||||
func TestCheckNeeds_StageOrder(t *testing.T) {
|
||||
p := &model.Pipeline{
|
||||
Stages: []string{"build", "test", "deploy"},
|
||||
Jobs: map[string]model.Job{
|
||||
"build-job": {
|
||||
Name: "build-job",
|
||||
Stage: "build",
|
||||
Script: []any{"make"},
|
||||
Needs: []any{"deploy-job"},
|
||||
},
|
||||
"deploy-job": {
|
||||
Name: "deploy-job",
|
||||
Stage: "deploy",
|
||||
Script: []any{"make deploy"},
|
||||
},
|
||||
},
|
||||
}
|
||||
findings := checkNeeds(p)
|
||||
var gotStageOrder bool
|
||||
for _, f := range findings {
|
||||
if f.Rule == RuleNeedsStageOrder {
|
||||
gotStageOrder = true
|
||||
}
|
||||
}
|
||||
if !gotStageOrder {
|
||||
t.Errorf("build-job needing deploy-job (later stage): expected GL025 finding; got: %v", findings)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user