51 lines
1.5 KiB
Go
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")
|
|
}
|
|
}
|