yumi-golang/internal/router/game_provider_routes_test.go
2026-04-28 18:05:13 +08:00

144 lines
4.2 KiB
Go

package router
import (
"testing"
"chatapp3-golang/internal/service/gameprovider"
)
func TestPublicRoomGameListResponseKeepsLegacyProviderFields(t *testing.T) {
resp := publicRoomGameListResponse(&gameprovider.RoomGameListResponse{
Items: []gameprovider.RoomGameListItem{
{
ID: 9527,
GameID: "bs_1046",
GameType: "BAISHUN",
Provider: "BAISHUN",
ProviderGameID: "1046",
Name: "Lucky77Pro",
},
},
})
if len(resp.Items) != 1 {
t.Fatalf("items = %d, want 1", len(resp.Items))
}
item := resp.Items[0]
if item.Provider != "BAISHUN" {
t.Fatalf("provider = %q, want BAISHUN", item.Provider)
}
if item.VendorType != "BAISHUN" {
t.Fatalf("vendorType = %q, want BAISHUN", item.VendorType)
}
if item.ProviderGameID != "1046" {
t.Fatalf("providerGameId = %q, want 1046", item.ProviderGameID)
}
if item.VendorGameID != "1046" {
t.Fatalf("vendorGameId = %q, want 1046", item.VendorGameID)
}
}
func TestPublicRoomGameListResponseMapsLingxianToLeaderForOldClients(t *testing.T) {
resp := publicRoomGameListResponse(&gameprovider.RoomGameListResponse{
Items: []gameprovider.RoomGameListItem{
{
ID: 9528,
GameID: "1090",
GameType: "LINGXIAN",
Provider: "LINGXIAN",
ProviderGameID: "1090",
Name: "Lingxian Game",
LaunchParams: map[string]any{"gameType": "LINGXIAN", "screenMode": "half"},
},
},
})
if len(resp.Items) != 1 {
t.Fatalf("items = %d, want 1", len(resp.Items))
}
item := resp.Items[0]
if item.Provider != "LEADER" {
t.Fatalf("provider = %q, want LEADER", item.Provider)
}
if item.GameType != "LEADER" {
t.Fatalf("gameType = %q, want LEADER", item.GameType)
}
if item.VendorType != "LEADER" {
t.Fatalf("vendorType = %q, want LEADER", item.VendorType)
}
if got := item.LaunchParams["gameType"]; got != "LEADER" {
t.Fatalf("launchParams.gameType = %v, want LEADER", got)
}
if got := item.LaunchParams["screenMode"]; got != "half" {
t.Fatalf("launchParams.screenMode = %v, want half", got)
}
}
func TestPublicLaunchKeepsLegacyBridgeAndProviderFields(t *testing.T) {
launchConfig := map[string]any{"code": "launch-code"}
resp := publicLaunch(&gameprovider.LaunchResponse{
ID: 9527,
GameSessionID: "bs_room_1",
Provider: "BAISHUN",
GameID: "bs_1046",
ProviderGameID: "1046",
LaunchConfig: launchConfig,
RoomState: gameprovider.RoomStateResponse{
RoomID: "room-1",
State: "PLAYING",
Provider: "BAISHUN",
CurrentProviderGameID: "1046",
},
})
if resp.Provider != "BAISHUN" {
t.Fatalf("provider = %q, want BAISHUN", resp.Provider)
}
if resp.VendorType != "BAISHUN" {
t.Fatalf("vendorType = %q, want BAISHUN", resp.VendorType)
}
if resp.VendorGameID != "1046" {
t.Fatalf("vendorGameId = %q, want 1046", resp.VendorGameID)
}
bridgeConfig, ok := resp.BridgeConfig.(map[string]any)
if !ok {
t.Fatalf("bridgeConfig type = %T, want map[string]any", resp.BridgeConfig)
}
if got := bridgeConfig["code"]; got != "launch-code" {
t.Fatalf("bridgeConfig[code] = %v, want launch-code", got)
}
if resp.RoomState.Provider != "BAISHUN" {
t.Fatalf("roomState.provider = %q, want BAISHUN", resp.RoomState.Provider)
}
if resp.RoomState.CurrentVendorGameID != "1046" {
t.Fatalf("roomState.currentVendorGameId = %q, want 1046", resp.RoomState.CurrentVendorGameID)
}
}
func TestPublicLaunchMapsLingxianToLeaderForOldClients(t *testing.T) {
resp := publicLaunch(&gameprovider.LaunchResponse{
ID: 9528,
GameSessionID: "lx_1_1090",
Provider: "LINGXIAN",
GameID: "1090",
ProviderGameID: "1090",
LaunchConfig: map[string]any{"uid": "user-1"},
RoomState: gameprovider.RoomStateResponse{
RoomID: "room-1",
State: "PLAYING",
Provider: "LINGXIAN",
CurrentProviderGameID: "1090",
},
})
if resp.Provider != "LEADER" {
t.Fatalf("provider = %q, want LEADER", resp.Provider)
}
if resp.VendorType != "LEADER" {
t.Fatalf("vendorType = %q, want LEADER", resp.VendorType)
}
if resp.RoomState.Provider != "LEADER" {
t.Fatalf("roomState.provider = %q, want LEADER", resp.RoomState.Provider)
}
}