mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 23:54:33 +01:00
Add tests for: - Discord handlers (getPlayerSlice, getCharacterList) - House handlers (boxToBytes, HouseData, Title structs) - Mail struct tests - Mercenary handlers (Partner, HunterNavi structs) - Shop/Gacha handlers (writeShopItems, ShopItem, Gacha structs) - Additional handler coverage for guild, tower, and simple handlers - Stage handler tests for binary operations and enumeration - Channel server tests for BroadcastMHF and session management
164 lines
3.6 KiB
Go
164 lines
3.6 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestPlayerStruct(t *testing.T) {
|
|
player := Player{
|
|
CharName: "TestPlayer",
|
|
QuestID: 5,
|
|
}
|
|
|
|
if player.CharName != "TestPlayer" {
|
|
t.Errorf("CharName = %s, want TestPlayer", player.CharName)
|
|
}
|
|
if player.QuestID != 5 {
|
|
t.Errorf("QuestID = %d, want 5", player.QuestID)
|
|
}
|
|
}
|
|
|
|
func TestGetPlayerSlice_EmptyServer(t *testing.T) {
|
|
server := createMockServer()
|
|
server.Channels = []*Server{}
|
|
|
|
players := getPlayerSlice(server)
|
|
|
|
if len(players) != 0 {
|
|
t.Errorf("Expected 0 players, got %d", len(players))
|
|
}
|
|
}
|
|
|
|
func TestGetPlayerSlice_WithChannel(t *testing.T) {
|
|
server := createMockServer()
|
|
|
|
// Create a channel with stages
|
|
channel := &Server{
|
|
stages: make(map[string]*Stage),
|
|
}
|
|
|
|
// Create a stage with clients
|
|
stage := NewStage("test_stage")
|
|
session := createMockSession(1, server)
|
|
session.Name = "Player1"
|
|
stage.clients[session] = session.charID
|
|
|
|
channel.stages["test_stage"] = stage
|
|
server.Channels = []*Server{channel}
|
|
|
|
players := getPlayerSlice(server)
|
|
|
|
if len(players) != 1 {
|
|
t.Errorf("Expected 1 player, got %d", len(players))
|
|
}
|
|
if len(players) > 0 && players[0].CharName != "Player1" {
|
|
t.Errorf("Expected CharName Player1, got %s", players[0].CharName)
|
|
}
|
|
}
|
|
|
|
func TestGetPlayerSlice_MultiplePlayersMultipleStages(t *testing.T) {
|
|
server := createMockServer()
|
|
|
|
channel := &Server{
|
|
stages: make(map[string]*Stage),
|
|
}
|
|
|
|
// Stage 1 with one player
|
|
stage1 := NewStage("stage1")
|
|
session1 := createMockSession(1, server)
|
|
session1.Name = "Player1"
|
|
stage1.clients[session1] = session1.charID
|
|
channel.stages["stage1"] = stage1
|
|
|
|
// Stage 2 with two players
|
|
stage2 := NewStage("stage2")
|
|
session2 := createMockSession(2, server)
|
|
session2.Name = "Player2"
|
|
session3 := createMockSession(3, server)
|
|
session3.Name = "Player3"
|
|
stage2.clients[session2] = session2.charID
|
|
stage2.clients[session3] = session3.charID
|
|
channel.stages["stage2"] = stage2
|
|
|
|
server.Channels = []*Server{channel}
|
|
|
|
players := getPlayerSlice(server)
|
|
|
|
if len(players) != 3 {
|
|
t.Errorf("Expected 3 players, got %d", len(players))
|
|
}
|
|
}
|
|
|
|
func TestGetPlayerSlice_EmptyStage(t *testing.T) {
|
|
server := createMockServer()
|
|
|
|
channel := &Server{
|
|
stages: make(map[string]*Stage),
|
|
}
|
|
|
|
// Empty stage (no clients)
|
|
emptyStage := NewStage("empty_stage")
|
|
channel.stages["empty_stage"] = emptyStage
|
|
|
|
server.Channels = []*Server{channel}
|
|
|
|
players := getPlayerSlice(server)
|
|
|
|
if len(players) != 0 {
|
|
t.Errorf("Expected 0 players from empty stage, got %d", len(players))
|
|
}
|
|
}
|
|
|
|
func TestGetCharacterList_EmptyServer(t *testing.T) {
|
|
server := createMockServer()
|
|
server.Channels = []*Server{}
|
|
|
|
result := getCharacterList(server)
|
|
|
|
expected := "===== Online: 0 =====\n"
|
|
if result != expected {
|
|
t.Errorf("Expected %q, got %q", expected, result)
|
|
}
|
|
}
|
|
|
|
func TestGetCharacterList_WithPlayers(t *testing.T) {
|
|
server := createMockServer()
|
|
|
|
channel := &Server{
|
|
stages: make(map[string]*Stage),
|
|
}
|
|
|
|
stage := NewStage("lobby")
|
|
session := createMockSession(1, server)
|
|
session.Name = "Hunter1"
|
|
stage.clients[session] = session.charID
|
|
channel.stages["lobby"] = stage
|
|
|
|
server.Channels = []*Server{channel}
|
|
|
|
result := getCharacterList(server)
|
|
|
|
// Should contain the online count
|
|
if len(result) == 0 {
|
|
t.Error("Expected non-empty result")
|
|
}
|
|
|
|
// Should contain "Online: 1"
|
|
if !contains(result, "Online: 1") {
|
|
t.Errorf("Expected result to contain 'Online: 1', got %q", result)
|
|
}
|
|
}
|
|
|
|
func contains(s, substr string) bool {
|
|
return len(s) >= len(substr) && (s == substr || len(s) > 0 && containsAt(s, substr))
|
|
}
|
|
|
|
func containsAt(s, substr string) bool {
|
|
for i := 0; i <= len(s)-len(substr); i++ {
|
|
if s[i:i+len(substr)] == substr {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|