Skip to content

Commit 89da3f2

Browse files
committed
Add unit tests to Fansites API
1 parent 14c0680 commit 89da3f2

File tree

4 files changed

+1075
-57
lines changed

4 files changed

+1075
-57
lines changed

src/TibiaCharactersCharacterV3.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ type Characters struct {
114114

115115
//
116116
// The base includes two levels, Characters and Information
117-
type JSONData struct {
117+
type CharacterResponse struct {
118118
Characters Characters `json:"characters"`
119119
Information Information `json:"information"`
120120
}
@@ -153,7 +153,7 @@ var (
153153
)
154154

155155
// TibiaCharactersCharacterV3 func
156-
func TibiaCharactersCharacterV3Impl(BoxContentHTML string) JSONData {
156+
func TibiaCharactersCharacterV3Impl(BoxContentHTML string) CharacterResponse {
157157

158158
var (
159159
// local strings used in this function
@@ -479,7 +479,7 @@ func TibiaCharactersCharacterV3Impl(BoxContentHTML string) JSONData {
479479

480480
//
481481
// Build the data-blob
482-
jsonData := JSONData{
482+
return CharacterResponse{
483483
Characters{
484484
CharacterInformationData,
485485
AccountBadgesData,
@@ -493,13 +493,10 @@ func TibiaCharactersCharacterV3Impl(BoxContentHTML string) JSONData {
493493
Timestamp: TibiadataDatetimeV3(""),
494494
},
495495
}
496-
497-
return jsonData
498496
}
499497

500498
// TibiaDataParseKiller func - insert a html string and get the killers back
501499
func TibiaDataParseKiller(data string) (string, bool, bool, string) {
502-
503500
var (
504501
// local strings used in this function
505502
localTradedString = " (traded)"

src/TibiaFansitesV3.go

Lines changed: 54 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,52 @@ import (
1010
"github.com/gin-gonic/gin"
1111
)
1212

13+
// Child of Fansite
14+
type ContentType struct {
15+
Statistics bool `json:"statistics"`
16+
Texts bool `json:"texts"`
17+
Tools bool `json:"tools"`
18+
Wiki bool `json:"wiki"`
19+
}
20+
21+
// Child of Fansite
22+
type SocialMedia struct {
23+
Discord bool `json:"discord"`
24+
Facebook bool `json:"facebook"`
25+
Instagram bool `json:"instagram"`
26+
Reddit bool `json:"reddit"`
27+
Twitch bool `json:"twitch"`
28+
Twitter bool `json:"twitter"`
29+
Youtube bool `json:"youtube"`
30+
}
31+
32+
// Child of Fansites
33+
type Fansite struct {
34+
Name string `json:"name"`
35+
LogoURL string `json:"logo_url"`
36+
Homepage string `json:"homepage"`
37+
Contact string `json:"contact"`
38+
ContentType ContentType `json:"content_type"`
39+
SocialMedia SocialMedia `json:"social_media"`
40+
Languages []string `json:"languages"`
41+
Specials []string `json:"specials"`
42+
FansiteItem bool `json:"fansite_item"`
43+
FansiteItemURL string `json:"fansite_item_url"`
44+
}
45+
46+
// Child of JSONData
47+
type Fansites struct {
48+
PromotedFansites []Fansite `json:"promoted"`
49+
SupportedFansites []Fansite `json:"supported"`
50+
}
51+
52+
//
53+
// The base includes two levels: Fansites and Information
54+
type FansitesResponse struct {
55+
Fansites Fansites `json:"fansites"`
56+
Information Information `json:"information"`
57+
}
58+
1359
var (
1460
FansiteInformationRegex = regexp.MustCompile(`<td><a href="(.*)" target.*img .*src="(.*)" alt="(.*)"\/><\/a>.*<a href=".*">(.*)<\/a><\/td><td.*top;">(.*)<\/td><td.*top;">(.*)<\/td><td.*top;">(.*)<\/td><td.*<ul><li>(.*)<\/li><\/ul><\/td><td.*top;">(.*)<\/td>`)
1561
FansiteImgTagRegex = regexp.MustCompile(`<img[^>]+\bsrc="([^"]+)"`)
@@ -19,52 +65,6 @@ var (
1965

2066
// TibiaFansitesV3 func
2167
func TibiaFansitesV3(c *gin.Context) {
22-
23-
// Child of Fansite
24-
type ContentType struct {
25-
Statistics bool `json:"statistics"`
26-
Texts bool `json:"texts"`
27-
Tools bool `json:"tools"`
28-
Wiki bool `json:"wiki"`
29-
}
30-
// Child of Fansite
31-
type SocialMedia struct {
32-
Discord bool `json:"discord"`
33-
Facebook bool `json:"facebook"`
34-
Instagram bool `json:"instagram"`
35-
Reddit bool `json:"reddit"`
36-
Twitch bool `json:"twitch"`
37-
Twitter bool `json:"twitter"`
38-
Youtube bool `json:"youtube"`
39-
}
40-
41-
// Child of Fansites
42-
type Fansite struct {
43-
Name string `json:"name"`
44-
LogoURL string `json:"logo_url"`
45-
Homepage string `json:"homepage"`
46-
Contact string `json:"contact"`
47-
ContentType ContentType `json:"content_type"`
48-
SocialMedia SocialMedia `json:"social_media"`
49-
Languages []string `json:"languages"`
50-
Specials []string `json:"specials"`
51-
FansiteItem bool `json:"fansite_item"`
52-
FansiteItemURL string `json:"fansite_item_url"`
53-
}
54-
55-
// Child of JSONData
56-
type Fansites struct {
57-
PromotedFansites []Fansite `json:"promoted"`
58-
SupportedFansites []Fansite `json:"supported"`
59-
}
60-
61-
//
62-
// The base includes two levels: Fansites and Information
63-
type JSONData struct {
64-
Fansites Fansites `json:"fansites"`
65-
Information Information `json:"information"`
66-
}
67-
6868
// Getting data with TibiadataHTMLDataCollectorV3
6969
TibiadataRequest.URL = "https://www.tibia.com/community/?subtopic=fansites"
7070
BoxContentHTML, err := TibiadataHTMLDataCollectorV3(TibiadataRequest)
@@ -75,6 +75,13 @@ func TibiaFansitesV3(c *gin.Context) {
7575
return
7676
}
7777

78+
jsonData := TibiaFansitesV3Impl(BoxContentHTML)
79+
80+
// return jsonData
81+
TibiaDataAPIHandleSuccessResponse(c, "TibiaFansitesV3", jsonData)
82+
}
83+
84+
func TibiaFansitesV3Impl(BoxContentHTML string) FansitesResponse {
7885
// Loading HTML data into ReaderHTML for goquery with NewReader
7986
ReaderHTML, err := goquery.NewDocumentFromReader(strings.NewReader(BoxContentHTML))
8087
if err != nil {
@@ -207,9 +214,8 @@ func TibiaFansitesV3(c *gin.Context) {
207214

208215
}
209216

210-
//
211217
// Build the data-blob
212-
jsonData := JSONData{
218+
return FansitesResponse{
213219
Fansites{
214220
PromotedFansites: PromotedFansitesData,
215221
SupportedFansites: SupportedFansitesData,
@@ -219,7 +225,4 @@ func TibiaFansitesV3(c *gin.Context) {
219225
Timestamp: TibiadataDatetimeV3(""),
220226
},
221227
}
222-
223-
// return jsonData
224-
TibiaDataAPIHandleSuccessResponse(c, "TibiaFansitesV3", jsonData)
225228
}

src/TibiaFansitesV3_test.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package main
2+
3+
import (
4+
"io/ioutil"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestFansites(t *testing.T) {
11+
data, err := ioutil.ReadFile("../testdata/fansites/all.html")
12+
if err != nil {
13+
t.Errorf("File reading error: %s", err)
14+
return
15+
}
16+
17+
fansitesJson := TibiaFansitesV3Impl(string(data))
18+
assert := assert.New(t)
19+
20+
assert.Equal(17, len(fansitesJson.Fansites.PromotedFansites))
21+
22+
assert.Equal(22, len(fansitesJson.Fansites.SupportedFansites))
23+
24+
tibiaDataFansite := fansitesJson.Fansites.SupportedFansites[6]
25+
assert.Equal("TibiaData.com", tibiaDataFansite.Name)
26+
assert.Equal("https://static.tibia.com/images/community/fansitelogos/TibiaData.com.gif", tibiaDataFansite.LogoURL)
27+
assert.Equal("https://tibiadata.com", tibiaDataFansite.Homepage)
28+
assert.Equal("Trollefar", tibiaDataFansite.Contact)
29+
assert.False(tibiaDataFansite.ContentType.Statistics)
30+
assert.False(tibiaDataFansite.ContentType.Texts)
31+
assert.True(tibiaDataFansite.ContentType.Tools)
32+
assert.False(tibiaDataFansite.ContentType.Wiki)
33+
assert.False(tibiaDataFansite.SocialMedia.Discord)
34+
assert.False(tibiaDataFansite.SocialMedia.Facebook)
35+
assert.False(tibiaDataFansite.SocialMedia.Instagram)
36+
assert.False(tibiaDataFansite.SocialMedia.Reddit)
37+
assert.False(tibiaDataFansite.SocialMedia.Twitch)
38+
assert.False(tibiaDataFansite.SocialMedia.Twitter)
39+
assert.False(tibiaDataFansite.SocialMedia.Youtube)
40+
assert.Equal(1, len(tibiaDataFansite.Languages))
41+
assert.Equal("us", tibiaDataFansite.Languages[0])
42+
assert.Equal(3, len(tibiaDataFansite.Specials))
43+
assert.Equal("API for Tibia data in JSON.", tibiaDataFansite.Specials[0])
44+
assert.Equal("Discord server.", tibiaDataFansite.Specials[1])
45+
assert.Equal("GitHub participant.", tibiaDataFansite.Specials[2])
46+
assert.False(tibiaDataFansite.FansiteItem)
47+
assert.Equal("", tibiaDataFansite.FansiteItemURL)
48+
49+
tibiaGalleryFansite := fansitesJson.Fansites.SupportedFansites[9]
50+
assert.Equal("TibiaGallery.com", tibiaGalleryFansite.Name)
51+
assert.Equal("https://static.tibia.com/images/community/fansitelogos/TibiaGallery.com.gif", tibiaGalleryFansite.LogoURL)
52+
assert.Equal("https://tibiagallery.com/", tibiaGalleryFansite.Homepage)
53+
assert.Equal("Ewrr", tibiaGalleryFansite.Contact)
54+
assert.False(tibiaGalleryFansite.ContentType.Statistics)
55+
assert.False(tibiaGalleryFansite.ContentType.Texts)
56+
assert.True(tibiaGalleryFansite.ContentType.Tools)
57+
assert.False(tibiaGalleryFansite.ContentType.Wiki)
58+
assert.False(tibiaGalleryFansite.SocialMedia.Discord)
59+
assert.False(tibiaGalleryFansite.SocialMedia.Facebook)
60+
assert.True(tibiaGalleryFansite.SocialMedia.Instagram)
61+
assert.False(tibiaGalleryFansite.SocialMedia.Reddit)
62+
assert.False(tibiaGalleryFansite.SocialMedia.Twitch)
63+
assert.False(tibiaGalleryFansite.SocialMedia.Twitter)
64+
assert.False(tibiaGalleryFansite.SocialMedia.Youtube)
65+
assert.Equal(9, len(tibiaGalleryFansite.Languages))
66+
assert.Equal("br", tibiaGalleryFansite.Languages[0])
67+
assert.Equal("pl", tibiaGalleryFansite.Languages[1])
68+
assert.Equal("mx", tibiaGalleryFansite.Languages[2])
69+
assert.Equal("us", tibiaGalleryFansite.Languages[3])
70+
assert.Equal("se", tibiaGalleryFansite.Languages[4])
71+
assert.Equal("de", tibiaGalleryFansite.Languages[5])
72+
assert.Equal("fi", tibiaGalleryFansite.Languages[6])
73+
assert.Equal("fr", tibiaGalleryFansite.Languages[7])
74+
assert.Equal("tr", tibiaGalleryFansite.Languages[8])
75+
assert.Equal(1, len(tibiaGalleryFansite.Specials))
76+
assert.Equal("Upload, browse, like and share pictures.", tibiaGalleryFansite.Specials[0])
77+
assert.True(tibiaGalleryFansite.FansiteItem)
78+
assert.Equal("https://static.tibia.com/images/community/fansiteitems/TibiaGallery.com.gif", tibiaGalleryFansite.FansiteItemURL)
79+
}

0 commit comments

Comments
 (0)