2026-05-16 08:12:42 +08:00

73 lines
2.9 KiB
Go

package resource
import (
"encoding/json"
"testing"
)
func TestApplyGrantOperatorsUsesSourceSpecificProfiles(t *testing.T) {
grants := []grantDTO{
{GrantID: "grant-admin", GrantSource: "admin", OperatorUserID: 7},
{GrantID: "grant-manager", GrantSource: "manager_center", OperatorUserID: 9001},
}
applyGrantOperators(grants, map[uint]adminOperator{
7: {UserID: 7, Username: "admin", Name: "后台管理员"},
}, map[int64]managerOperator{
9001: {UserID: 9001, DisplayUserID: "10086", Username: "经理 A", Avatar: "https://cdn.example/avatar.png"},
})
if grants[0].Operator == nil || grants[0].Operator.Source != "admin" || grants[0].Operator.Name != "后台管理员" || grants[0].Operator.Username != "admin" {
t.Fatalf("admin operator mismatch: %+v", grants[0].Operator)
}
if grants[1].Operator == nil || grants[1].Operator.Source != "manager_center" || grants[1].Operator.DisplayUserID != "10086" || grants[1].Operator.Avatar == "" || grants[1].Operator.Username != "经理 A" {
t.Fatalf("manager operator mismatch: %+v", grants[1].Operator)
}
}
func TestApplyGrantTargetUsersKeepsFallbackUserID(t *testing.T) {
grants := []grantDTO{
{GrantID: "grant-with-user", TargetUserID: 1001},
{GrantID: "grant-missing-user", TargetUserID: 1002},
}
applyGrantTargetUsers(grants, map[int64]grantUserDTO{
1001: {UserID: 1001, DisplayUserID: "900001", Username: "玩家 A", Avatar: "https://cdn.example/user.png"},
})
if grants[0].TargetUser == nil || grants[0].TargetUser.DisplayUserID != "900001" || grants[0].TargetUser.Username != "玩家 A" {
t.Fatalf("target user mismatch: %+v", grants[0].TargetUser)
}
if grants[1].TargetUser == nil || grants[1].TargetUser.UserID != 1002 || grants[1].TargetUser.DisplayUserID != "" {
t.Fatalf("target fallback mismatch: %+v", grants[1].TargetUser)
}
}
func TestEmojiPackMetadataDefaultsToAllRegions(t *testing.T) {
metadata, err := emojiPackMetadataJSON([]int64{0, 1001}, "", "")
if err != nil {
t.Fatalf("metadata build failed: %v", err)
}
var payload emojiPackMetadataPayload
if err := json.Unmarshal([]byte(metadata), &payload); err != nil {
t.Fatalf("metadata json mismatch: %v", err)
}
if payload.RegionScope != "all" || len(payload.RegionIDs) != 0 || payload.Category != defaultEmojiPackCategory || payload.PricingType != emojiPackPricingFree {
t.Fatalf("unexpected all-region metadata: %+v", payload)
}
}
func TestEmojiPackMetadataKeepsLimitedRegions(t *testing.T) {
metadata, err := emojiPackMetadataJSON([]int64{1001, 1001, 1002}, "会员", "paid")
if err != nil {
t.Fatalf("metadata build failed: %v", err)
}
payload := emojiPackMetadataFromJSON(metadata)
if payload.RegionScope != "limited" || payload.Category != "会员" || payload.PricingType != emojiPackPricingPaid {
t.Fatalf("unexpected limited-region metadata: %+v", payload)
}
if len(payload.RegionIDs) != 2 || payload.RegionIDs[0] != 1001 || payload.RegionIDs[1] != 1002 {
t.Fatalf("unexpected region ids: %+v", payload.RegionIDs)
}
}