Files
goauto/server/app/admin/service/sys_role_access_test.go
T

51 lines
1.5 KiB
Go

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")
}
}