Skip to content

Commit eb269fa

Browse files
chore: refactor TibiaKillstatistics for better maintainability (#513)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 52d7c94 commit eb269fa

File tree

2 files changed

+121
-16
lines changed

2 files changed

+121
-16
lines changed

src/TibiaKillstatistics.go

Lines changed: 24 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,18 @@ 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+
if len(dataColumns) < 5 {
97+
// Not enough columns; return zero-value Entry
98+
return Entry{}
99+
}
100+
return Entry{
101+
Race: TibiaDataSanitizeEscapedString(dataColumns[0].FirstChild.Data),
102+
LastDayKilledPlayers: TibiaDataStringToInteger(dataColumns[1].FirstChild.Data),
103+
LastDayKilledByPlayers: TibiaDataStringToInteger(dataColumns[2].FirstChild.Data),
104+
LastWeekKilledPlayers: TibiaDataStringToInteger(dataColumns[3].FirstChild.Data),
105+
LastWeekKilledByPlayers: TibiaDataStringToInteger(dataColumns[4].FirstChild.Data),
106+
}
107+
}

src/TibiaKillstatistics_test.go

Lines changed: 97 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,99 @@ 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+
assert.Equal(t, expected, result)
133+
}
134+
135+
// Test with edge cases
136+
func TestExtractKillStatisticsEdgeCases(t *testing.T) {
137+
// Test with empty strings
138+
emptyNode := &html.Node{
139+
FirstChild: &html.Node{
140+
Data: "",
141+
},
142+
}
143+
144+
// Test with zero values
145+
zeroNode := &html.Node{
146+
FirstChild: &html.Node{
147+
Data: "0",
148+
},
149+
}
150+
151+
dataColumns := []*html.Node{
152+
emptyNode, // Race
153+
zeroNode, // LastDayKilledPlayers
154+
zeroNode, // LastDayKilledByPlayers
155+
zeroNode, // LastWeekKilledPlayers
156+
zeroNode, // LastWeekKilledByPlayers
157+
}
158+
159+
result := extractKillStatistics(dataColumns)
160+
161+
if result.Race != "" {
162+
t.Errorf("Empty race: got %v, want empty string", result.Race)
163+
}
164+
165+
if result.LastDayKilledPlayers != 0 {
166+
t.Errorf("Zero last day killed players: got %v, want 0", result.LastDayKilledPlayers)
167+
}
168+
169+
if result.LastWeekKilledByPlayers != 0 {
170+
t.Errorf("Zero last week killed by players: got %v, want 0", result.LastWeekKilledByPlayers)
171+
}
172+
}

0 commit comments

Comments
 (0)