Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 24 additions & 16 deletions src/TibiaKillstatistics.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"strings"

"github.com/PuerkitoBio/goquery"
"golang.org/x/net/html"
)

// Child of KillStatistics
Expand Down Expand Up @@ -53,25 +54,17 @@ func TibiaKillstatisticsImpl(world string, BoxContentHTML string, url string) (K

// Running query over each div
ReaderHTML.Find("#KillStatisticsTable .TableContent tr.Odd,tr.Even").Each(func(index int, s *goquery.Selection) {
DataColumns := s.Find("td").Nodes
// Extract kill statistics from table row
killStats := extractKillStatistics(s.Find("td").Nodes)

KillStatisticsLastDayKilledPlayers := TibiaDataStringToInteger(DataColumns[1].FirstChild.Data)
TotalLastDayKilledPlayers += KillStatisticsLastDayKilledPlayers
KillStatisticsLastDayKilledByPlayers := TibiaDataStringToInteger(DataColumns[2].FirstChild.Data)
TotalLastDayKilledByPlayers += KillStatisticsLastDayKilledByPlayers
KillStatisticsLastWeekKilledPlayers := TibiaDataStringToInteger(DataColumns[3].FirstChild.Data)
TotalLastWeekKilledPlayers += KillStatisticsLastWeekKilledPlayers
KillStatisticsLastWeekKilledByPlayers := TibiaDataStringToInteger(DataColumns[4].FirstChild.Data)
TotalLastWeekKilledByPlayers += KillStatisticsLastWeekKilledByPlayers
// Accumulate totals
TotalLastDayKilledPlayers += killStats.LastDayKilledPlayers
TotalLastDayKilledByPlayers += killStats.LastDayKilledByPlayers
TotalLastWeekKilledPlayers += killStats.LastWeekKilledPlayers
TotalLastWeekKilledByPlayers += killStats.LastWeekKilledByPlayers

// Append new Entry item to KillStatisticsData
KillStatisticsData = append(KillStatisticsData, Entry{
Race: TibiaDataSanitizeEscapedString(DataColumns[0].FirstChild.Data),
LastDayKilledPlayers: KillStatisticsLastDayKilledPlayers,
LastDayKilledByPlayers: KillStatisticsLastDayKilledByPlayers,
LastWeekKilledPlayers: KillStatisticsLastWeekKilledPlayers,
LastWeekKilledByPlayers: KillStatisticsLastWeekKilledByPlayers,
})
KillStatisticsData = append(KillStatisticsData, killStats)
})

//
Expand All @@ -97,3 +90,18 @@ func TibiaKillstatisticsImpl(world string, BoxContentHTML string, url string) (K
},
}, nil
}

// Helper function to extract and convert kill statistics
func extractKillStatistics(dataColumns []*html.Node) Entry {
if len(dataColumns) < 5 {
// Not enough columns; return zero-value Entry
return Entry{}
}
return Entry{
Race: TibiaDataSanitizeEscapedString(dataColumns[0].FirstChild.Data),
LastDayKilledPlayers: TibiaDataStringToInteger(dataColumns[1].FirstChild.Data),
LastDayKilledByPlayers: TibiaDataStringToInteger(dataColumns[2].FirstChild.Data),
LastWeekKilledPlayers: TibiaDataStringToInteger(dataColumns[3].FirstChild.Data),
LastWeekKilledByPlayers: TibiaDataStringToInteger(dataColumns[4].FirstChild.Data),
}
}
97 changes: 97 additions & 0 deletions src/TibiaKillstatistics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/stretchr/testify/assert"
"github.com/tibiadata/tibiadata-api-go/src/static"
"golang.org/x/net/html"
)

func TestAntica(t *testing.T) {
Expand Down Expand Up @@ -73,3 +74,99 @@ func BenchmarkAntica(b *testing.B) {
assert.Equal("Antica", anticaJson.KillStatistics.World)
}
}

func TestExtractKillStatistics(t *testing.T) {
// Create mock HTML nodes for testing
raceNode := &html.Node{
FirstChild: &html.Node{
Data: "Dragon",
},
}

lastDayKilledPlayersNode := &html.Node{
FirstChild: &html.Node{
Data: "150",
},
}

lastDayKilledByPlayersNode := &html.Node{
FirstChild: &html.Node{
Data: "25",
},
}

lastWeekKilledPlayersNode := &html.Node{
FirstChild: &html.Node{
Data: "1200",
},
}

lastWeekKilledByPlayersNode := &html.Node{
FirstChild: &html.Node{
Data: "85",
},
}

// Create dataColumns slice
dataColumns := []*html.Node{
raceNode,
lastDayKilledPlayersNode,
lastDayKilledByPlayersNode,
lastWeekKilledPlayersNode,
lastWeekKilledByPlayersNode,
}

// Call the function
result := extractKillStatistics(dataColumns)

// Define expected values
expected := Entry{
Race: "Dragon",
LastDayKilledPlayers: 150,
LastDayKilledByPlayers: 25,
LastWeekKilledPlayers: 1200,
LastWeekKilledByPlayers: 85,
}

// Assert results
assert.Equal(t, expected, result)
}

// Test with edge cases
func TestExtractKillStatisticsEdgeCases(t *testing.T) {
// Test with empty strings
emptyNode := &html.Node{
FirstChild: &html.Node{
Data: "",
},
}

// Test with zero values
zeroNode := &html.Node{
FirstChild: &html.Node{
Data: "0",
},
}

dataColumns := []*html.Node{
emptyNode, // Race
zeroNode, // LastDayKilledPlayers
zeroNode, // LastDayKilledByPlayers
zeroNode, // LastWeekKilledPlayers
zeroNode, // LastWeekKilledByPlayers
}

result := extractKillStatistics(dataColumns)

if result.Race != "" {
t.Errorf("Empty race: got %v, want empty string", result.Race)
}

if result.LastDayKilledPlayers != 0 {
t.Errorf("Zero last day killed players: got %v, want 0", result.LastDayKilledPlayers)
}

if result.LastWeekKilledByPlayers != 0 {
t.Errorf("Zero last week killed by players: got %v, want 0", result.LastWeekKilledByPlayers)
}
}