Files
kra-new/internal/data/business/alert_rule_test.go
T

58 lines
1.9 KiB
Go

package business
import (
"context"
"kra/internal/biz/business"
"testing"
)
func TestAlertRulesKeepHistoryAndDoNotOverwriteConcurrentToggle(t *testing.T) {
db := prepareAccounts(t)
if err := db.Create(&accountPO{ID: 7, Username: "owner", Level: 1}).Error; err != nil {
t.Fatal(err)
}
r := NewAlertRuleRepo(testData{db})
ctx := context.Background()
threshold := "20.50"
period, direction := 7, 2
rule := &business.AlertRule{Name: "规则", Type: "register_anomaly", Metric: 1, StatPeriodDays: &period, MomDirection: &direction, MomThreshold: &threshold, CreatorID: 7, Enabled: 1, MonitorScope: 1, WarningColor: "red"}
if err := r.Create(ctx, rule); err != nil {
t.Fatal(err)
}
if err := r.SetEnabled(ctx, rule.ID, 0); err != nil {
t.Fatal(err)
}
rule.Name = "已修改"
if err := r.Update(ctx, rule); err != nil {
t.Fatal(err)
}
loaded, err := r.Find(ctx, rule.ID)
if err != nil {
t.Fatal(err)
}
if loaded.Enabled != 0 || loaded.CreatorID != 7 || loaded.CreatorName != "owner" {
t.Fatalf("编辑覆盖了独立状态或归属: %+v", loaded)
}
rows, total, err := r.List(ctx, business.LevelOneScope{UserID: 7}, business.AlertRuleFilter{})
if err != nil || total != 1 || len(rows) != 1 {
t.Fatalf("规则列表错误: %v", err)
}
if err := db.Create(&alertRecordPO{BusinessID: 7, RuleType: "register_anomaly"}).Error; err != nil {
t.Fatal(err)
}
if err := db.Create(&alertRecordPO{BusinessID: 99, RuleType: "other"}).Error; err != nil {
t.Fatal(err)
}
if err := r.SetDeleted(ctx, rule.ID); err != nil {
t.Fatal(err)
}
_, total, err = r.List(ctx, business.LevelOneScope{UserID: 7}, business.AlertRuleFilter{})
if err != nil || total != 0 {
t.Fatal("删除后仍出现在规则列表")
}
types, err := r.TypesFromRecords(ctx, business.LevelOneScope{UserID: 7})
if err != nil || len(types) != 1 || types[0] != "register_anomaly" {
t.Fatalf("删除规则后丢失历史分类或跨商务泄漏: %+v %v", types, err)
}
}