2026-06-11 13:33:44 +08:00

75 lines
2.1 KiB
Go

package gamemanagement
import (
"testing"
gamev1 "hyapp.local/api/proto/game/v1"
)
func TestPlatformFromProtoReturnsCallbackSecret(t *testing.T) {
const secret = "yomi-or-lingxian-secret"
got := platformFromProto(&gamev1.GamePlatform{
PlatformCode: "yomi",
CallbackSecret: secret,
CallbackSecretSet: true,
})
if got.CallbackSecret != secret {
t.Fatalf("CallbackSecret = %q, want %q", got.CallbackSecret, secret)
}
if !got.CallbackSecretSet {
t.Fatal("CallbackSecretSet = false, want true")
}
}
func TestRoomRPSConfigRequestRequiresFourGiftTiers(t *testing.T) {
_, err := (roomRPSConfigRequest{
Status: "active",
ChallengeTimeoutMS: 600000,
RevealCountdownMS: 3000,
StakeGifts: []roomRPSStakeGiftReq{
{GiftID: 1001, Enabled: true, SortOrder: 1},
{GiftID: 1002, Enabled: true, SortOrder: 2},
{GiftID: 1003, Enabled: true, SortOrder: 3},
},
}).toProto()
if err == nil {
t.Fatal("toProto must reject room rps config without exactly four gift tiers")
}
}
func TestRoomRPSConfigRequestDefaultsOpenConfig(t *testing.T) {
got, err := (roomRPSConfigRequest{
StakeGifts: []roomRPSStakeGiftReq{
{GiftID: 1001, Enabled: true},
{GiftID: 1002, Enabled: true},
{GiftID: 1003, Enabled: true},
{GiftID: 1004, Enabled: true},
},
}).toProto()
if err != nil {
t.Fatalf("toProto failed: %v", err)
}
if got.GetStatus() != "active" || got.GetChallengeTimeoutMs() != 600000 || got.GetRevealCountdownMs() != 3000 {
t.Fatalf("room rps default config mismatch: %+v", got)
}
if got.GetStakeGifts()[3].GetSortOrder() != 4 {
t.Fatalf("default sort order mismatch: %+v", got.GetStakeGifts())
}
}
func TestRoomRPSChallengeFromProtoKeepsLargeIDsAsStrings(t *testing.T) {
got := roomRPSChallengeFromProto(&gamev1.RoomRPSChallenge{
ChallengeId: "rps-1",
StakeGiftId: 9007199254740993,
Initiator: &gamev1.RoomRPSPlayer{UserId: 9007199254740995, Gesture: "rock"},
WinnerUserId: 9007199254740995,
})
if got.StakeGiftID != "9007199254740993" || got.Initiator.UserID != "9007199254740995" || got.WinnerUserID != "9007199254740995" {
t.Fatalf("large IDs must stay string-safe in admin JSON: %+v", got)
}
}