56 lines
1.9 KiB
Go
56 lines
1.9 KiB
Go
package bell_rule_alert_test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"go-admin/app/bell/rule"
|
|
)
|
|
|
|
func TestRuleNormalizeTrimsAndNormalizesFields(t *testing.T) {
|
|
eventType := " danger_area_entered "
|
|
location := " 东门 "
|
|
got, err := rule.Normalize(rule.WriteInput{
|
|
Code: " AREA_HIGH ", Name: " 高风险区域 ", EventType: &eventType,
|
|
MinimumSeverity: " HIGH ", LocationContains: &location,
|
|
}, true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got.Code != "area_high" || got.Name != "高风险区域" || got.MinimumSeverity != "high" {
|
|
t.Fatalf("unexpected normalized rule: %#v", got)
|
|
}
|
|
if got.EventType == nil || *got.EventType != "danger_area_entered" || got.LocationContains == nil || *got.LocationContains != "东门" {
|
|
t.Fatalf("optional fields were not normalized: %#v", got)
|
|
}
|
|
}
|
|
|
|
func TestRuleNormalizeRejectsInvalidInput(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input rule.WriteInput
|
|
}{
|
|
{name: "invalid code", input: rule.WriteInput{Code: "Bad Code", Name: "规则", MinimumSeverity: "low"}},
|
|
{name: "missing name", input: rule.WriteInput{Code: "valid-code", Name: " ", MinimumSeverity: "low"}},
|
|
{name: "unknown severity", input: rule.WriteInput{Code: "valid-code", Name: "规则", MinimumSeverity: "urgent"}},
|
|
{name: "control character", input: rule.WriteInput{Code: "valid-code", Name: "规则\n泄露", MinimumSeverity: "low"}},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
if _, err := rule.Normalize(test.input, true); !errors.Is(err, rule.ErrInvalid) {
|
|
t.Fatalf("expected ErrInvalid, got %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRuleUpdateKeepsImmutableCodeOutsideInput(t *testing.T) {
|
|
got, err := rule.Normalize(rule.WriteInput{Code: "ignored invalid code", Name: "更新后规则", MinimumSeverity: "medium"}, false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got.Name != "更新后规则" || got.MinimumSeverity != "medium" {
|
|
t.Fatalf("unexpected update normalization: %#v", got)
|
|
}
|
|
}
|