diff --git a/functions/core/length_test.go b/functions/core/length_test.go index 3e2f5caa..96635e67 100644 --- a/functions/core/length_test.go +++ b/functions/core/length_test.go @@ -415,3 +415,32 @@ tags: assert.Len(t, res, 0) // should just do nothing. } + +func TestLength_RunRule_TestPathAllTags(t *testing.T) { + + sampleYaml := ` +tags: + - name: "taggy" + description: 10.12 + - name: "tiggy" + description: 1.22` + + path := "$.tags[*]" + + nodes, _ := utils.FindNodes([]byte(sampleYaml), path) + + ops := make(map[string]string) + ops["max"] = "1" + ops["min"] = "0" + + rule := buildCoreTestRule(path, model.SeverityError, "length", "name", ops) + ctx := buildCoreTestContext(model.CastToRuleAction(rule.Then), ops) + ctx.Given = path + ctx.Rule = &rule + + le := Length{} + res := le.RunRule(nodes, ctx) + + assert.Len(t, res, 2) + +} diff --git a/model/results.go b/model/results.go index 49e4d3d1..28c9190d 100644 --- a/model/results.go +++ b/model/results.go @@ -56,9 +56,9 @@ func NewRuleResultSet(results []RuleFunctionResult) *RuleResultSet { Results: pointerResults, categoryMap: make(map[*RuleCategory][]*RuleFunctionResult), } - defer rrs.GetErrorCount() - defer rrs.GetInfoCount() - defer rrs.GetWarnCount() + rrs.GetErrorCount() + rrs.GetInfoCount() + rrs.GetWarnCount() return rrs } @@ -95,6 +95,8 @@ func (rr *RuleResultSet) GenerateSpectralReport(source string) []reports.Spectra sev = 2 case SeverityHint: sev = 3 + default: + sev = 3 } resultRange := reports.Range{ @@ -220,6 +222,10 @@ func (rr *RuleResultSet) GetWarningsByRuleCategory(category string) []*RuleFunct case SeverityWarn: filtered = append(filtered, cat) } + // by default rules with no severity, are warnings. + if cat.Rule.Severity == "" { + filtered = append(filtered, cat) + } } return filtered } @@ -300,10 +306,14 @@ func (rr *RuleResultSet) GetResultsForCategoryWithLimit(category string, limit i func getCount(rr *RuleResultSet, severity string) int { c := 0 for _, res := range rr.Results { - if res.Rule != nil && res.Rule.Severity != "" { + if res.Rule != nil { if res.Rule.Severity == severity { c++ } + // if there is no severity, mark it as a warning by default. + if res.Rule.Severity == "" && severity == SeverityWarn { + c++ + } } } return c diff --git a/model/utils.go b/model/utils.go index f867e871..2da2fb56 100644 --- a/model/utils.go +++ b/model/utils.go @@ -125,6 +125,9 @@ func countPropsInterface(options map[string]interface{}, numProps int) int { if _, ok := v.(int); ok { numProps++ } + if _, ok := v.(float64); ok { + numProps++ + } if _, ok := v.(bool); ok { numProps++ }