diff --git a/pkg/testcoverage/check.go b/pkg/testcoverage/check.go index d5f337be..87a76cf1 100644 --- a/pkg/testcoverage/check.go +++ b/pkg/testcoverage/check.go @@ -76,9 +76,12 @@ func GenerateCoverageStats(cfg Config) ([]coverage.Stats, error) { func Analyze(cfg Config, current, base []coverage.Stats) AnalyzeResult { thr := cfg.Threshold overrideRules := compileOverridePathRules(cfg) + hasFileOverrides, hasPackageOverrides := detectOverrides(cfg.Override) return AnalyzeResult{ Threshold: thr, + HasFileOverrides: hasFileOverrides, + HasPackageOverrides: hasPackageOverrides, FilesBelowThreshold: checkCoverageStatsBelowThreshold(current, thr.File, overrideRules), PackagesBelowThreshold: checkCoverageStatsBelowThreshold( makePackageStats(current), thr.Package, overrideRules, @@ -89,6 +92,21 @@ func Analyze(cfg Config, current, base []coverage.Stats) AnalyzeResult { } } +func detectOverrides(overrides []Override) (bool, bool) { + hasFileOverrides := false + hasPackageOverrides := false + + for _, override := range overrides { + if strings.HasSuffix(override.Path, ".go") || strings.HasSuffix(override.Path, ".go$") { + hasFileOverrides = true + } else { + hasPackageOverrides = true + } + } + + return hasFileOverrides, hasPackageOverrides +} + func saveCoverageBreakdown(cfg Config, stats []coverage.Stats) error { if cfg.BreakdownFileName == "" { return nil diff --git a/pkg/testcoverage/check_test.go b/pkg/testcoverage/check_test.go index b421f3bc..81a12c59 100644 --- a/pkg/testcoverage/check_test.go +++ b/pkg/testcoverage/check_test.go @@ -118,7 +118,7 @@ func TestCheck(t *testing.T) { pass := Check(buf, cfg) assert.True(t, pass) assertGithubActionErrorsCount(t, buf.String(), 0) - assertHumanReport(t, buf.String(), 1, 0) + assertHumanReport(t, buf.String(), 2, 0) assert.GreaterOrEqual(t, strings.Count(buf.String(), prefix), 0) }) @@ -134,6 +134,38 @@ func TestCheck(t *testing.T) { pass := Check(buf, cfg) assert.False(t, pass) assertGithubActionErrorsCount(t, buf.String(), 0) + assertHumanReport(t, buf.String(), 0, 2) + assert.GreaterOrEqual(t, strings.Count(buf.String(), prefix), 0) + }) + + t.Run("valid profile - pass after file override", func(t *testing.T) { + t.Parallel() + + buf := &bytes.Buffer{} + cfg := Config{ + Profile: profileOK, + Threshold: Threshold{File: 70}, + Override: []Override{{Threshold: 60, Path: "pkg/testcoverage/badgestorer/github.go"}}, + } + pass := Check(buf, cfg) + assert.True(t, pass) + assertGithubActionErrorsCount(t, buf.String(), 0) + assertHumanReport(t, buf.String(), 1, 0) + assert.GreaterOrEqual(t, strings.Count(buf.String(), prefix), 0) + }) + + t.Run("valid profile - fail after file override", func(t *testing.T) { + t.Parallel() + + buf := &bytes.Buffer{} + cfg := Config{ + Profile: profileOK, + Threshold: Threshold{File: 70}, + Override: []Override{{Threshold: 80, Path: "pkg/testcoverage/badgestorer/github.go"}}, + } + pass := Check(buf, cfg) + assert.False(t, pass) + assertGithubActionErrorsCount(t, buf.String(), 0) assertHumanReport(t, buf.String(), 0, 1) assert.GreaterOrEqual(t, strings.Count(buf.String(), prefix), 0) }) diff --git a/pkg/testcoverage/report.go b/pkg/testcoverage/report.go index e6fac393..fc879ed7 100644 --- a/pkg/testcoverage/report.go +++ b/pkg/testcoverage/report.go @@ -36,14 +36,14 @@ func reportCoverage(w io.Writer, result AnalyzeResult) { thr := result.Threshold - if thr.File > 0 { // File threshold report + if thr.File > 0 || result.HasFileOverrides { // File threshold report fmt.Fprintf(tabber, "File coverage threshold (%d%%) satisfied:\t", thr.File) fmt.Fprint(tabber, statusStr(len(result.FilesBelowThreshold) == 0)) reportIssuesForHuman(tabber, result.FilesBelowThreshold) fmt.Fprint(tabber, "\n") } - if thr.Package > 0 { // Package threshold report + if thr.Package > 0 || result.HasPackageOverrides { // Package threshold report fmt.Fprintf(tabber, "Package coverage threshold (%d%%) satisfied:\t", thr.Package) fmt.Fprint(tabber, statusStr(len(result.PackagesBelowThreshold) == 0)) reportIssuesForHuman(tabber, result.PackagesBelowThreshold) diff --git a/pkg/testcoverage/types.go b/pkg/testcoverage/types.go index e853cdf6..b142648a 100644 --- a/pkg/testcoverage/types.go +++ b/pkg/testcoverage/types.go @@ -15,6 +15,8 @@ type AnalyzeResult struct { TotalStats coverage.Stats HasBaseBreakdown bool Diff []FileCoverageDiff + HasFileOverrides bool + HasPackageOverrides bool } func (r *AnalyzeResult) Pass() bool {