Skip to content

Commit 9061c67

Browse files
committed
chore: refactor TibiaKillstatistics
1 parent 6f1a6d6 commit 9061c67

2 files changed

Lines changed: 135 additions & 16 deletions

File tree

src/TibiaKillstatistics.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77

88
"github.com/PuerkitoBio/goquery"
9+
"golang.org/x/net/html"
910
)
1011

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

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

58-
KillStatisticsLastDayKilledPlayers := TibiaDataStringToInteger(DataColumns[1].FirstChild.Data)
59-
TotalLastDayKilledPlayers += KillStatisticsLastDayKilledPlayers
60-
KillStatisticsLastDayKilledByPlayers := TibiaDataStringToInteger(DataColumns[2].FirstChild.Data)
61-
TotalLastDayKilledByPlayers += KillStatisticsLastDayKilledByPlayers
62-
KillStatisticsLastWeekKilledPlayers := TibiaDataStringToInteger(DataColumns[3].FirstChild.Data)
63-
TotalLastWeekKilledPlayers += KillStatisticsLastWeekKilledPlayers
64-
KillStatisticsLastWeekKilledByPlayers := TibiaDataStringToInteger(DataColumns[4].FirstChild.Data)
65-
TotalLastWeekKilledByPlayers += KillStatisticsLastWeekKilledByPlayers
60+
// Accumulate totals
61+
TotalLastDayKilledPlayers += killStats.LastDayKilledPlayers
62+
TotalLastDayKilledByPlayers += killStats.LastDayKilledByPlayers
63+
TotalLastWeekKilledPlayers += killStats.LastWeekKilledPlayers
64+
TotalLastWeekKilledByPlayers += killStats.LastWeekKilledByPlayers
6665

6766
// Append new Entry item to KillStatisticsData
68-
KillStatisticsData = append(KillStatisticsData, Entry{
69-
Race: TibiaDataSanitizeEscapedString(DataColumns[0].FirstChild.Data),
70-
LastDayKilledPlayers: KillStatisticsLastDayKilledPlayers,
71-
LastDayKilledByPlayers: KillStatisticsLastDayKilledByPlayers,
72-
LastWeekKilledPlayers: KillStatisticsLastWeekKilledPlayers,
73-
LastWeekKilledByPlayers: KillStatisticsLastWeekKilledByPlayers,
74-
})
67+
KillStatisticsData = append(KillStatisticsData, killStats)
7568
})
7669

7770
//
@@ -97,3 +90,14 @@ func TibiaKillstatisticsImpl(world string, BoxContentHTML string, url string) (K
9790
},
9891
}, nil
9992
}
93+
94+
// Helper function to extract and convert kill statistics
95+
func extractKillStatistics(dataColumns []*html.Node) Entry {
96+
return Entry{
97+
Race: TibiaDataSanitizeEscapedString(dataColumns[0].FirstChild.Data),
98+
LastDayKilledPlayers: TibiaDataStringToInteger(dataColumns[1].FirstChild.Data),
99+
LastDayKilledByPlayers: TibiaDataStringToInteger(dataColumns[2].FirstChild.Data),
100+
LastWeekKilledPlayers: TibiaDataStringToInteger(dataColumns[3].FirstChild.Data),
101+
LastWeekKilledByPlayers: TibiaDataStringToInteger(dataColumns[4].FirstChild.Data),
102+
}
103+
}

src/TibiaKillstatistics_test.go

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/stretchr/testify/assert"
88
"github.com/tibiadata/tibiadata-api-go/src/static"
9+
"golang.org/x/net/html"
910
)
1011

1112
func TestAntica(t *testing.T) {
@@ -73,3 +74,117 @@ func BenchmarkAntica(b *testing.B) {
7374
assert.Equal("Antica", anticaJson.KillStatistics.World)
7475
}
7576
}
77+
78+
func TestExtractKillStatistics(t *testing.T) {
79+
// Create mock HTML nodes for testing
80+
raceNode := &html.Node{
81+
FirstChild: &html.Node{
82+
Data: "Dragon",
83+
},
84+
}
85+
86+
lastDayKilledPlayersNode := &html.Node{
87+
FirstChild: &html.Node{
88+
Data: "150",
89+
},
90+
}
91+
92+
lastDayKilledByPlayersNode := &html.Node{
93+
FirstChild: &html.Node{
94+
Data: "25",
95+
},
96+
}
97+
98+
lastWeekKilledPlayersNode := &html.Node{
99+
FirstChild: &html.Node{
100+
Data: "1200",
101+
},
102+
}
103+
104+
lastWeekKilledByPlayersNode := &html.Node{
105+
FirstChild: &html.Node{
106+
Data: "85",
107+
},
108+
}
109+
110+
// Create dataColumns slice
111+
dataColumns := []*html.Node{
112+
raceNode,
113+
lastDayKilledPlayersNode,
114+
lastDayKilledByPlayersNode,
115+
lastWeekKilledPlayersNode,
116+
lastWeekKilledByPlayersNode,
117+
}
118+
119+
// Call the function
120+
result := extractKillStatistics(dataColumns)
121+
122+
// Define expected values
123+
expected := Entry{
124+
Race: "Dragon",
125+
LastDayKilledPlayers: 150,
126+
LastDayKilledByPlayers: 25,
127+
LastWeekKilledPlayers: 1200,
128+
LastWeekKilledByPlayers: 85,
129+
}
130+
131+
// Assert results
132+
if result.Race != expected.Race {
133+
t.Errorf("Race: got %v, want %v", result.Race, expected.Race)
134+
}
135+
136+
if result.LastDayKilledPlayers != expected.LastDayKilledPlayers {
137+
t.Errorf("LastDayKilledPlayers: got %v, want %v", result.LastDayKilledPlayers, expected.LastDayKilledPlayers)
138+
}
139+
140+
if result.LastDayKilledByPlayers != expected.LastDayKilledByPlayers {
141+
t.Errorf("LastDayKilledByPlayers: got %v, want %v", result.LastDayKilledByPlayers, expected.LastDayKilledByPlayers)
142+
}
143+
144+
if result.LastWeekKilledPlayers != expected.LastWeekKilledPlayers {
145+
t.Errorf("LastWeekKilledPlayers: got %v, want %v", result.LastWeekKilledPlayers, expected.LastWeekKilledPlayers)
146+
}
147+
148+
if result.LastWeekKilledByPlayers != expected.LastWeekKilledByPlayers {
149+
t.Errorf("LastWeekKilledByPlayers: got %v, want %v", result.LastWeekKilledByPlayers, expected.LastWeekKilledByPlayers)
150+
}
151+
}
152+
153+
// Test with edge cases
154+
func TestExtractKillStatisticsEdgeCases(t *testing.T) {
155+
// Test with empty strings
156+
emptyNode := &html.Node{
157+
FirstChild: &html.Node{
158+
Data: "",
159+
},
160+
}
161+
162+
// Test with zero values
163+
zeroNode := &html.Node{
164+
FirstChild: &html.Node{
165+
Data: "0",
166+
},
167+
}
168+
169+
dataColumns := []*html.Node{
170+
emptyNode, // Race
171+
zeroNode, // LastDayKilledPlayers
172+
zeroNode, // LastDayKilledByPlayers
173+
zeroNode, // LastWeekKilledPlayers
174+
zeroNode, // LastWeekKilledByPlayers
175+
}
176+
177+
result := extractKillStatistics(dataColumns)
178+
179+
if result.Race != "" {
180+
t.Errorf("Empty race: got %v, want empty string", result.Race)
181+
}
182+
183+
if result.LastDayKilledPlayers != 0 {
184+
t.Errorf("Zero last day killed players: got %v, want 0", result.LastDayKilledPlayers)
185+
}
186+
187+
if result.LastWeekKilledByPlayers != 0 {
188+
t.Errorf("Zero last week killed by players: got %v, want 0", result.LastWeekKilledByPlayers)
189+
}
190+
}

0 commit comments

Comments
 (0)