128 lines
4.1 KiB
Go
128 lines
4.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 TestSelfGameNewUserPolicyKeepsNormalPhaseTargetWinRate(t *testing.T) {
|
|
proto := (selfGameNewUserPolicyRequest{
|
|
Enabled: true,
|
|
ProtectionRounds: 30,
|
|
ProtectionHours: 168,
|
|
MaxStakeCoin: 5000,
|
|
LifetimeSubsidyQuotaCoin: 30000,
|
|
Day1SubsidyQuotaCoin: 15000,
|
|
SingleRoundSubsidyCapCoin: 5000,
|
|
StrategyLevel: "soft_boost",
|
|
LoseStreakProtectionEnabled: true,
|
|
LoseStreakTrigger: 2,
|
|
NormalPhaseTargetWinRatePercent: 57,
|
|
BlackPoolRobotForceWinEnabled: true,
|
|
}).toProto("dice")
|
|
|
|
if proto.GetNormalPhaseTargetWinRatePercent() != 57 {
|
|
t.Fatalf("request normal phase target = %d, want 57", proto.GetNormalPhaseTargetWinRatePercent())
|
|
}
|
|
if !proto.GetBlackPoolRobotForceWinEnabled() {
|
|
t.Fatal("request black pool robot force win switch was not preserved")
|
|
}
|
|
|
|
dto := selfGameNewUserPolicyFromProto(&gamev1.SelfGameNewUserPolicy{
|
|
GameId: "dice",
|
|
NormalPhaseTargetWinRatePercent: 57,
|
|
BlackPoolRobotForceWinEnabled: true,
|
|
})
|
|
if dto.NormalPhaseTargetWinRatePercent != 57 {
|
|
t.Fatalf("dto normal phase target = %d, want 57", dto.NormalPhaseTargetWinRatePercent)
|
|
}
|
|
if !dto.BlackPoolRobotForceWinEnabled {
|
|
t.Fatal("dto black pool robot force win switch was not preserved")
|
|
}
|
|
}
|
|
|
|
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 TestRoomRPSConfigRequestAcceptsStringGiftIDs(t *testing.T) {
|
|
got, err := (roomRPSConfigRequest{
|
|
StakeGifts: []roomRPSStakeGiftReq{
|
|
{GiftID: "Gifi-3", Enabled: true, SortOrder: 1},
|
|
{GiftID: "Gifi-2", Enabled: true, SortOrder: 2},
|
|
{GiftID: "Gifi-1", Enabled: true, SortOrder: 3},
|
|
{GiftID: "lw1", Enabled: true, SortOrder: 4},
|
|
},
|
|
}).toProto()
|
|
if err != nil {
|
|
t.Fatalf("toProto should accept string gift ids: %v", err)
|
|
}
|
|
if got.GetStakeGifts()[0].GetGiftIdText() != "Gifi-3" || got.GetStakeGifts()[0].GetGiftId() != 0 {
|
|
t.Fatalf("string gift id should stay in text field without fake numeric id: %+v", got.GetStakeGifts()[0])
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|