From 797d3bb0c43afd1e05d8e0da0515b7ee822288a3 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Sat, 9 Mar 2024 15:29:15 +0100 Subject: [PATCH] fix: rule severity is required (#4469) --- pkg/config/severity.go | 4 ++ pkg/config/severity_test.go | 123 +++++++++++++++++++++++++++++++++++- 2 files changed, 124 insertions(+), 3 deletions(-) diff --git a/pkg/config/severity.go b/pkg/config/severity.go index c707959ca403..49874c9a4c3a 100644 --- a/pkg/config/severity.go +++ b/pkg/config/severity.go @@ -34,5 +34,9 @@ type SeverityRule struct { } func (s *SeverityRule) Validate() error { + if s.Severity == "" { + return errors.New("severity should be set") + } + return s.BaseRule.Validate(severityRuleMinConditionsCount) } diff --git a/pkg/config/severity_test.go b/pkg/config/severity_test.go index 60c2ad25707d..049fd1663a8b 100644 --- a/pkg/config/severity_test.go +++ b/pkg/config/severity_test.go @@ -7,7 +7,108 @@ import ( ) func TestSeverity_Validate(t *testing.T) { + testCases := []struct { + desc string + severity *Severity + }{ + { + desc: "default with rules", + severity: &Severity{ + Default: "high", + Rules: []SeverityRule{ + { + Severity: "low", + BaseRule: BaseRule{ + Path: "test", + }, + }, + }, + }, + }, + { + desc: "default without rules", + severity: &Severity{ + Default: "high", + }, + }, + { + desc: "same severity between default and rule", + severity: &Severity{ + Default: "high", + Rules: []SeverityRule{ + { + Severity: "high", + BaseRule: BaseRule{ + Path: "test", + }, + }, + }, + }, + }, + } + + for _, test := range testCases { + test := test + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + err := test.severity.Validate() + require.NoError(t, err) + }) + } +} + +func TestSeverity_Validate_error(t *testing.T) { + testCases := []struct { + desc string + severity *Severity + expected string + }{ + { + desc: "missing default severity", + severity: &Severity{ + Default: "", + Rules: []SeverityRule{ + { + Severity: "low", + BaseRule: BaseRule{ + Path: "test", + }, + }, + }, + }, + expected: "can't set severity rule option: no default severity defined", + }, + { + desc: "missing rule severity", + severity: &Severity{ + Default: "high", + Rules: []SeverityRule{ + { + BaseRule: BaseRule{ + Path: "test", + }, + }, + }, + }, + expected: "error in severity rule #0: severity should be set", + }, + } + + for _, test := range testCases { + test := test + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + err := test.severity.Validate() + require.EqualError(t, err, test.expected) + }) + } +} + +func TestSeverityRule_Validate(t *testing.T) { rule := &SeverityRule{ + Severity: "low", BaseRule: BaseRule{ Path: "test", }, @@ -17,20 +118,32 @@ func TestSeverity_Validate(t *testing.T) { require.NoError(t, err) } -func TestSeverity_Validate_error(t *testing.T) { +func TestSeverityRule_Validate_error(t *testing.T) { testCases := []struct { desc string rule *SeverityRule expected string }{ { - desc: "empty rule", - rule: &SeverityRule{}, + desc: "missing severity", + rule: &SeverityRule{ + BaseRule: BaseRule{ + Path: "test", + }, + }, + expected: "severity should be set", + }, + { + desc: "empty rule", + rule: &SeverityRule{ + Severity: "low", + }, expected: "at least 1 of (text, source, path[-except], linters) should be set", }, { desc: "invalid path rule", rule: &SeverityRule{ + Severity: "low", BaseRule: BaseRule{ Path: "**test", }, @@ -40,6 +153,7 @@ func TestSeverity_Validate_error(t *testing.T) { { desc: "invalid path-except rule", rule: &SeverityRule{ + Severity: "low", BaseRule: BaseRule{ PathExcept: "**test", }, @@ -49,6 +163,7 @@ func TestSeverity_Validate_error(t *testing.T) { { desc: "invalid text rule", rule: &SeverityRule{ + Severity: "low", BaseRule: BaseRule{ Text: "**test", }, @@ -58,6 +173,7 @@ func TestSeverity_Validate_error(t *testing.T) { { desc: "invalid source rule", rule: &SeverityRule{ + Severity: "low", BaseRule: BaseRule{ Source: "**test", }, @@ -67,6 +183,7 @@ func TestSeverity_Validate_error(t *testing.T) { { desc: "path and path-expect", rule: &SeverityRule{ + Severity: "low", BaseRule: BaseRule{ Path: "test", PathExcept: "test",