package service import ( "testing" "go-admin/app/admin/models" "go-admin/app/goauto/access" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func TestPoliciesForPurchaserIgnoreSelectedMenuAPIs(t *testing.T) { menus := []models.SysMenu{{ SysApi: []models.SysApi{{Path: "/api/admin/v1/ai-matching-settings/test", Action: "POST"}}, }} policies := policiesForRole(access.RolePurchaser, menus) if len(policies) != len(access.PurchaserAPIs()) { t.Fatalf("got %d policies, want %d", len(policies), len(access.PurchaserAPIs())) } for _, policy := range policies { if policy[1] == "/api/admin/v1/ai-matching-settings/test" { t.Fatal("selected menu must not grant an administrator-only API") } } } func TestValidatePurchaserMenuSelectionRejectsAI(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { t.Fatal(err) } if err = db.AutoMigrate(&models.SysMenu{}); err != nil { t.Fatal(err) } ai := models.SysMenu{MenuName: "GoAutoAiMatchingSettings", Title: "AI 规格匹配"} other := models.SysMenu{MenuName: "GoAutoPurchaseTasks", Title: "采购管理"} if err = db.Create(&ai).Error; err != nil { t.Fatal(err) } if err = db.Create(&other).Error; err != nil { t.Fatal(err) } if err = validatePurchaserMenuSelection(db, []int{other.MenuId}); err != nil { t.Fatalf("ordinary purchaser menu rejected: %v", err) } if err = validatePurchaserMenuSelection(db, []int{ai.MenuId}); err == nil { t.Fatal("AI matching menu selection must be rejected") } }