package version import ( "git.ilapage.cn/ila/yovision/Sense/server/app/sense/outbox" migrationModels "git.ilapage.cn/ila/yovision/Sense/server/cmd/migrate/migration/models" common "git.ilapage.cn/ila/yovision/Sense/server/common/models" "gorm.io/driver/sqlite" "gorm.io/gorm" "testing" ) func TestOutboxMigrationAddsRBACWithoutFixtures(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { t.Fatal(err) } if err = db.AutoMigrate(&migrationModels.SysRole{}, &migrationModels.SysMenu{}, &deviceCasbinRule{}, &common.Migration{}); err != nil { t.Fatal(err) } for _, role := range []string{"implementation_operator", "site_admin", "viewer"} { if err = db.Create(&migrationModels.SysRole{RoleName: role, RoleKey: role, Status: "2"}).Error; err != nil { t.Fatal(err) } } const version = "2026082815000_outbox.go" if err = migrateSenseOutbox(db, version); err != nil { t.Fatal(err) } if !db.Migrator().HasTable(&outbox.Message{}) || !db.Migrator().HasTable(&outbox.DeliveryRecord{}) || !db.Migrator().HasTable(&outbox.Attempt{}) { t.Fatal("outbox tables missing") } var menus, reads, writes, fixtures, applied int64 db.Model(&migrationModels.SysMenu{}).Where("menu_name LIKE ?", "SenseOutbox%").Count(&menus) db.Model(&deviceCasbinRule{}).Where("v1 LIKE ? AND v2 = ?", "/api/v1/outbox%", "GET").Count(&reads) db.Model(&deviceCasbinRule{}).Where("v1 = ? AND v2 = ?", "/api/v1/outbox/:id/requeue", "POST").Count(&writes) db.Model(&outbox.Message{}).Count(&fixtures) db.Model(&common.Migration{}).Where("version = ?", version).Count(&applied) if menus != 3 || reads != 6 || writes != 2 || fixtures != 0 || applied != 1 { t.Fatalf("menus=%d reads=%d writes=%d fixtures=%d applied=%d", menus, reads, writes, fixtures, applied) } }