Files
kra-new/internal/modules/business/alert_surface_test.go
T

52 lines
1.5 KiB
Go

package business
import (
"github.com/glebarez/sqlite"
"github.com/robfig/cron/v3"
"gorm.io/gorm"
datatask "kra/internal/data/task"
"path/filepath"
"testing"
"time"
)
func TestAlertScheduleUpgradePreservesDisabledTaskAndUsesShanghaiMidnight(t *testing.T) {
db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "alert-schedule.db")), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
pool, _ := db.DB()
t.Cleanup(func() { _ = pool.Close() })
for _, step := range datatask.Migrations() {
if err := step.Migrate(db); err != nil {
t.Fatal(err)
}
}
if err := db.Exec("INSERT INTO sys_timed_tasks(name,method_name,spec,with_seconds,enabled) VALUES('历史预警任务','alertTriggerTask','*/5 * * * *',0,0)").Error; err != nil {
t.Fatal(err)
}
for i := 0; i < 2; i++ {
if err := migrateAlertSurface(db); err != nil {
t.Fatal(err)
}
}
var rows []struct {
Spec string
Enabled bool
}
if err := db.Table("sys_timed_tasks").Where("method_name='alertTriggerTask'").Scan(&rows).Error; err != nil {
t.Fatal(err)
}
if len(rows) != 1 || rows[0].Enabled || rows[0].Spec != alertDetectionTask.Spec {
t.Fatalf("迁移不应重复或启用管理员停用的任务: %+v", rows)
}
schedule, err := cron.ParseStandard(rows[0].Spec)
if err != nil {
t.Fatal(err)
}
next := schedule.Next(time.Date(2026, 11, 5, 12, 0, 0, 0, time.UTC))
if next.UTC() != time.Date(2026, 11, 5, 16, 0, 0, 0, time.UTC) {
t.Fatalf("没有按上海零点执行: %v", next)
}
}