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) } }