package business import ( "github.com/glebarez/sqlite" "gorm.io/gorm" datasystem "kra/internal/data/system" "path/filepath" "testing" ) func TestActivationUpgradeGivesAllBusinessLevelsApplicationAccess(t *testing.T) { db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "surface.db")), &gorm.Config{}) if err != nil { t.Fatal(err) } pool, _ := db.DB() defer pool.Close() for _, step := range datasystem.Migrations() { if err := step.Migrate(db); err != nil { t.Fatal(err) } } for _, sql := range []string{"INSERT INTO sys_authorities(authority_id,business_level) VALUES(888,NULL),(41,1),(57,2),(83,3),(100,NULL)", "INSERT INTO sys_base_menus(id,name,title) VALUES(1,'sw_BusMgmt','商务管理'),(2,'sw_ChannelActivationList','渠道激活')"} { if err := db.Exec(sql).Error; err != nil { t.Fatal(err) } } for i := 0; i < 2; i++ { if err := migrateActivationSurface(db); err != nil { t.Fatal(err) } } var count int64 if err := db.Table("sys_authority_menus").Where("sys_base_menu_id=2 AND sys_authority_authority_id IN (41,57,83)").Count(&count).Error; err != nil || count != 3 { t.Fatalf("business menu access %d: %v", count, err) } if err := db.Table("casbin_rule").Where("v0 IN ('41','57','83') AND v1='/sw/promoteActivePool/apply' AND v2='POST'").Count(&count).Error; err != nil || count != 3 { t.Fatalf("application grants %d: %v", count, err) } if err := db.Table("casbin_rule").Where("v0='100' AND v1='/sw/promoteActivePool/apply'").Count(&count).Error; err != nil || count != 0 { t.Fatal("unrelated role received grant") } }