Files
yovision/Bell/server/tests/bell_rule_alert/validation_test.go
T

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)
}
}