Skip to content

Commit aaa4c0c

Browse files
authored
Add unit tests for House Overview and House APIs (#72)
1 parent 4973837 commit aaa4c0c

13 files changed

+7025
-13
lines changed

src/TibiaHousesHouseV3.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func TibiaHousesHouseV3Impl(houseid string, BoxContentHTML string) HouseResponse
103103
HouseData.Size = TibiadataStringToIntegerV3(subma1[0][5])
104104
HouseData.Rent = TibiaDataConvertValuesWithK(subma1[0][6] + subma1[0][7])
105105

106-
HouseData.Status.Original = TibiaDataSanitizeEscapedString(RemoveHtmlTag(subma1[0][9]))
106+
HouseData.Status.Original = strings.TrimSpace(TibiaDataSanitizeNbspSpaceString(TibiaDataSanitizeEscapedString(RemoveHtmlTag(subma1[0][9]))))
107107

108108
switch {
109109
case strings.Contains(HouseData.Status.Original, "has been rented by"):
@@ -152,7 +152,7 @@ func TibiaHousesHouseV3Impl(houseid string, BoxContentHTML string) HouseResponse
152152
// storing values from regex
153153
HouseData.Status.Auction.AuctionEnd = TibiadataDatetimeV3(subma2[0][3])
154154
HouseData.Status.Auction.CurrentBid = TibiadataStringToIntegerV3(subma2[0][4])
155-
HouseData.Status.Auction.CurrentBidder = subma2[0][5]
155+
HouseData.Status.Auction.CurrentBidder = TibiaDataSanitizeNbspSpaceString(subma2[0][5])
156156
if subma2[0][2] == "will end" {
157157
HouseData.Status.Auction.AuctionOngoing = true
158158
}

src/TibiaHousesHouseV3_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package main
2+
3+
import (
4+
"io/ioutil"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestCormaya10(t *testing.T) {
11+
data, err := ioutil.ReadFile("../testdata/houses/Premia/Edron/Cormaya10.html")
12+
if err != nil {
13+
t.Errorf("File reading error: %s", err)
14+
return
15+
}
16+
17+
houseJson := TibiaHousesHouseV3Impl("54025", string(data))
18+
assert := assert.New(t)
19+
20+
assert.Equal(54025, houseJson.House.Houseid)
21+
assert.Equal("Premia", houseJson.House.World)
22+
assert.Equal("", houseJson.House.Town) //depends on TibiaDataHousesMapResolver
23+
assert.Equal("Cormaya 10", houseJson.House.Name)
24+
assert.Equal("", houseJson.House.Type) //depends on TibiaDataHousesMapResolver
25+
assert.Equal(3, houseJson.House.Beds)
26+
assert.Equal(80, houseJson.House.Size)
27+
assert.Equal(300000, houseJson.House.Rent)
28+
assert.Equal("https://static.tibia.com/images/houses/house_54025.png", houseJson.House.Img)
29+
30+
houseStatus := houseJson.House.Status
31+
assert.NotNil(houseStatus)
32+
assert.False(houseStatus.IsAuctioned)
33+
assert.True(houseStatus.IsRented)
34+
assert.False(houseStatus.IsMoving)
35+
assert.False(houseStatus.IsTransfering)
36+
assert.Equal(HouseAuction{CurrentBid: 0, CurrentBidder: "", AuctionOngoing: false, AuctionEnd: ""}, houseStatus.Auction)
37+
assert.Equal("The house has been rented by Xendor of Askara. He has paid the rent until Feb 02 2022, 10:05:26 CET.", houseStatus.Original)
38+
39+
houseRental := houseJson.House.Status.Rental
40+
assert.NotNil(houseRental)
41+
assert.Equal("Xendor of Askara", houseRental.Owner)
42+
assert.Equal("male", houseRental.OwnerSex)
43+
assert.Equal("2022-02-02T09:05:26Z", houseRental.PaidUntil)
44+
assert.Equal("", houseRental.MovingDate)
45+
assert.Equal("", houseRental.TransferReceiver)
46+
assert.Equal(0, houseRental.TransferPrice)
47+
assert.False(houseRental.TransferAccept)
48+
}
49+
50+
func TestCormaya11(t *testing.T) {
51+
data, err := ioutil.ReadFile("../testdata/houses/Premia/Edron/Cormaya11.html")
52+
if err != nil {
53+
t.Errorf("File reading error: %s", err)
54+
return
55+
}
56+
57+
houseJson := TibiaHousesHouseV3Impl("54026", string(data))
58+
assert := assert.New(t)
59+
60+
assert.Equal(54026, houseJson.House.Houseid)
61+
assert.Equal("Premia", houseJson.House.World)
62+
assert.Equal("", houseJson.House.Town) //depends on TibiaDataHousesMapResolver
63+
assert.Equal("Cormaya 11", houseJson.House.Name)
64+
assert.Equal("", houseJson.House.Type) //depends on TibiaDataHousesMapResolver
65+
assert.Equal(2, houseJson.House.Beds)
66+
assert.Equal(43, houseJson.House.Size)
67+
assert.Equal(150000, houseJson.House.Rent)
68+
assert.Equal("https://static.tibia.com/images/houses/house_54026.png", houseJson.House.Img)
69+
70+
houseStatus := houseJson.House.Status
71+
assert.NotNil(houseStatus)
72+
assert.True(houseStatus.IsAuctioned)
73+
assert.False(houseStatus.IsRented)
74+
assert.False(houseStatus.IsMoving)
75+
assert.False(houseStatus.IsTransfering)
76+
assert.Equal(HouseRental{Owner: "", OwnerSex: "", PaidUntil: "", MovingDate: "", TransferReceiver: "", TransferPrice: 0, TransferAccept: false}, houseStatus.Rental)
77+
assert.Equal("The house is currently being auctioned. The auction will end at Jan 21 2022, 10:00:00 CET. The highest bid so far is 200000 gold and has been submitted by Ciuchy Szajba.", houseStatus.Original)
78+
79+
houseAuction := houseJson.House.Status.Auction
80+
assert.NotNil(houseAuction)
81+
assert.Equal(200000, houseAuction.CurrentBid)
82+
assert.Equal("Ciuchy Szajba", houseAuction.CurrentBidder)
83+
assert.True(houseAuction.AuctionOngoing)
84+
assert.Equal("2022-01-21T09:00:00Z", houseAuction.AuctionEnd)
85+
}

src/TibiaHousesOverviewV3.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ import (
1212
)
1313

1414
// Child of House
15-
type HousesAction struct {
15+
type HousesAuction struct {
1616
AuctionBid int `json:"current_bid"`
1717
AuctionLeft string `json:"time_left"`
1818
}
1919

2020
// Child of HousesHouses
2121
type HousesHouse struct {
22-
Name string `json:"name"`
23-
HouseID int `json:"house_id"`
24-
Size int `json:"size"`
25-
Rent int `json:"rent"`
26-
IsRented bool `json:"rented"`
27-
IsAuctioned bool `json:"auctioned"`
28-
Auction HousesAction `json:"auction"`
22+
Name string `json:"name"`
23+
HouseID int `json:"house_id"`
24+
Size int `json:"size"`
25+
Rent int `json:"rent"`
26+
IsRented bool `json:"rented"`
27+
IsAuctioned bool `json:"auctioned"`
28+
Auction HousesAuction `json:"auction"`
2929
}
3030

3131
// Child of JSONData
@@ -48,7 +48,7 @@ var (
4848
)
4949

5050
// TibiaHousesOverviewV3 func
51-
func TibiaHousesOverviewV3Impl(c *gin.Context, world string, town string) HousesOverviewResponse {
51+
func TibiaHousesOverviewV3Impl(c *gin.Context, world string, town string, htmlDataCollector func(TibiadataRequestStruct) (string, error)) HousesOverviewResponse {
5252
var (
5353
// Creating empty vars
5454
HouseData, GuildhallData []HousesHouse
@@ -62,7 +62,7 @@ func TibiaHousesOverviewV3Impl(c *gin.Context, world string, town string) Houses
6262
Method: resty.MethodGet,
6363
URL: "https://www.tibia.com/community/?subtopic=houses&world=" + TibiadataQueryEscapeStringV3(world) + "&town=" + TibiadataQueryEscapeStringV3(town) + "&type=" + TibiadataQueryEscapeStringV3(HouseType),
6464
}
65-
BoxContentHTML, err := TibiadataHTMLDataCollectorV3(tibiadataRequest)
65+
BoxContentHTML, err := htmlDataCollector(tibiadataRequest)
6666

6767
// return error (e.g. for maintenance mode)
6868
if err != nil {

src/TibiaHousesOverviewV3_test.go

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package main
2+
3+
import (
4+
"io/ioutil"
5+
"strings"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestAnticaThaisHousesOverview(t *testing.T) {
12+
houseData, err := ioutil.ReadFile("../testdata/houses/overview/AnticaThaisHouses.html")
13+
if err != nil {
14+
t.Errorf("File reading error: %s", err)
15+
return
16+
}
17+
18+
guildData, err := ioutil.ReadFile("../testdata/houses/overview/AnticaThaisGuilds.html")
19+
if err != nil {
20+
t.Errorf("File reading error: %s", err)
21+
return
22+
}
23+
24+
housesJson := TibiaHousesOverviewV3Impl(
25+
nil,
26+
"Antica",
27+
"Thais",
28+
func(request TibiadataRequestStruct) (string, error) {
29+
if strings.Contains(request.URL, "guildhalls") {
30+
return string(guildData), nil
31+
}
32+
33+
return string(houseData), nil
34+
})
35+
assert := assert.New(t)
36+
37+
assert.Equal("Antica", housesJson.Houses.World)
38+
assert.Equal("Thais", housesJson.Houses.Town)
39+
40+
assert.Equal(118, len(housesJson.Houses.HouseList))
41+
42+
firstHouse := housesJson.Houses.HouseList[0]
43+
assert.Equal("Alai Flats, Flat 01", firstHouse.Name)
44+
assert.Equal(10301, firstHouse.HouseID)
45+
assert.Equal(17, firstHouse.Size)
46+
assert.Equal(50000, firstHouse.Rent)
47+
assert.True(firstHouse.IsRented)
48+
assert.False(firstHouse.IsAuctioned)
49+
assert.Equal(HousesAuction{AuctionBid: 0, AuctionLeft: ""}, firstHouse.Auction)
50+
51+
lastHouse := housesJson.Houses.HouseList[117]
52+
assert.Equal("Upper Swamp Lane 8", lastHouse.Name)
53+
assert.Equal(10405, lastHouse.HouseID)
54+
assert.Equal(132, lastHouse.Size)
55+
assert.Equal(600000, lastHouse.Rent)
56+
assert.True(lastHouse.IsRented)
57+
assert.False(lastHouse.IsAuctioned)
58+
assert.Equal(HousesAuction{AuctionBid: 0, AuctionLeft: ""}, lastHouse.Auction)
59+
60+
assert.Equal(14, len(housesJson.Houses.GuildhallList))
61+
62+
firstGuild := housesJson.Houses.GuildhallList[0]
63+
assert.Equal("Bloodhall", firstGuild.Name)
64+
assert.Equal(10005, firstGuild.HouseID)
65+
assert.Equal(306, firstGuild.Size)
66+
assert.Equal(500000, firstGuild.Rent)
67+
assert.True(firstGuild.IsRented)
68+
assert.False(firstGuild.IsAuctioned)
69+
assert.Equal(HousesAuction{AuctionBid: 0, AuctionLeft: ""}, firstGuild.Auction)
70+
71+
lastGuild := housesJson.Houses.GuildhallList[13]
72+
assert.Equal("Warriors' Guildhall", lastGuild.Name)
73+
assert.Equal(10801, lastGuild.HouseID)
74+
assert.Equal(306, lastGuild.Size)
75+
assert.Equal(5000000, lastGuild.Rent)
76+
assert.True(lastGuild.IsRented)
77+
assert.False(lastGuild.IsAuctioned)
78+
assert.Equal(HousesAuction{AuctionBid: 0, AuctionLeft: ""}, lastGuild.Auction)
79+
}
80+
81+
func TestPremiaFarmineHousesOverview(t *testing.T) {
82+
houseData, err := ioutil.ReadFile("../testdata/houses/overview/PremiaFarmineHouses.html")
83+
if err != nil {
84+
t.Errorf("File reading error: %s", err)
85+
return
86+
}
87+
88+
guildData, err := ioutil.ReadFile("../testdata/houses/overview/PremiaFarmineGuilds.html")
89+
if err != nil {
90+
t.Errorf("File reading error: %s", err)
91+
return
92+
}
93+
94+
housesJson := TibiaHousesOverviewV3Impl(
95+
nil,
96+
"Premia",
97+
"Farmine",
98+
func(request TibiadataRequestStruct) (string, error) {
99+
if strings.Contains(request.URL, "guildhalls") {
100+
return string(guildData), nil
101+
}
102+
103+
return string(houseData), nil
104+
})
105+
assert := assert.New(t)
106+
107+
assert.Equal("Premia", housesJson.Houses.World)
108+
assert.Equal("Farmine", housesJson.Houses.Town)
109+
110+
assert.Equal(2, len(housesJson.Houses.HouseList))
111+
112+
firstHouse := housesJson.Houses.HouseList[0]
113+
assert.Equal("Caveman Shelter", firstHouse.Name)
114+
assert.Equal(15001, firstHouse.HouseID)
115+
assert.Equal(87, firstHouse.Size)
116+
assert.Equal(150000, firstHouse.Rent)
117+
assert.False(firstHouse.IsRented)
118+
assert.True(firstHouse.IsAuctioned)
119+
assert.Equal(HousesAuction{AuctionBid: 0, AuctionLeft: ""}, firstHouse.Auction)
120+
121+
assert.Equal(0, len(housesJson.Houses.GuildhallList))
122+
}
123+
124+
func TestPremiaEdronHousesOverview(t *testing.T) {
125+
houseData, err := ioutil.ReadFile("../testdata/houses/overview/PremiaEdronHouses.html")
126+
if err != nil {
127+
t.Errorf("File reading error: %s", err)
128+
return
129+
}
130+
131+
guildData, err := ioutil.ReadFile("../testdata/houses/overview/PremiaEdronGuilds.html")
132+
if err != nil {
133+
t.Errorf("File reading error: %s", err)
134+
return
135+
}
136+
137+
housesJson := TibiaHousesOverviewV3Impl(
138+
nil,
139+
"Premia",
140+
"Edron",
141+
func(request TibiadataRequestStruct) (string, error) {
142+
if strings.Contains(request.URL, "guildhalls") {
143+
return string(guildData), nil
144+
}
145+
146+
return string(houseData), nil
147+
})
148+
assert := assert.New(t)
149+
150+
assert.Equal("Premia", housesJson.Houses.World)
151+
assert.Equal("Edron", housesJson.Houses.Town)
152+
153+
assert.Equal(129, len(housesJson.Houses.HouseList))
154+
155+
auctionedHouse := housesJson.Houses.HouseList[46]
156+
assert.Equal("Cormaya 11", auctionedHouse.Name)
157+
assert.Equal(54026, auctionedHouse.HouseID)
158+
assert.Equal(43, auctionedHouse.Size)
159+
assert.Equal(150000, auctionedHouse.Rent)
160+
assert.False(auctionedHouse.IsRented)
161+
assert.True(auctionedHouse.IsAuctioned)
162+
assert.Equal(HousesAuction{AuctionBid: 200000, AuctionLeft: "9 hours"}, auctionedHouse.Auction)
163+
164+
assert.Equal(6, len(housesJson.Houses.GuildhallList))
165+
}

src/webserver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ func tibiaHousesOverviewV3(c *gin.Context) {
388388
world = TibiadataStringWorldFormatToTitleV3(world)
389389
town = TibiadataStringWorldFormatToTitleV3(town)
390390

391-
jsonData := TibiaHousesOverviewV3Impl(c, world, town)
391+
jsonData := TibiaHousesOverviewV3Impl(c, world, town, TibiadataHTMLDataCollectorV3)
392392

393393
// return jsonData
394394
TibiaDataAPIHandleResponse(c, http.StatusOK, "TibiaHousesOverviewV3", jsonData)

0 commit comments

Comments
 (0)