Skip to content

Commit 4c8bd39

Browse files
authored
Fix crash when searchType is not provided (#28)
1 parent 6927ea1 commit 4c8bd39

File tree

3 files changed

+17
-19
lines changed

3 files changed

+17
-19
lines changed

handlers/getAdventurerSearch.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func getAdventurerSearch(w http.ResponseWriter, r *http.Request) {
1919
query, queryOk := validators.ValidateAdventurerNameQueryParam(r.URL.Query()["query"])
2020
region, regionOk := validators.ValidateRegionQueryParam(r.URL.Query()["region"])
2121
searchTypeQueryParam := r.URL.Query()["searchType"]
22-
searchType := validators.ValidateSearchTypeQueryParam(searchTypeQueryParam)
22+
searchType, searchTypeAsString := validators.ValidateSearchTypeQueryParam(searchTypeQueryParam)
2323

2424
if !queryOk || !regionOk {
2525
giveBadRequestResponse(w)
@@ -34,7 +34,7 @@ func getAdventurerSearch(w http.ResponseWriter, r *http.Request) {
3434
query = strings.ToLower(query)
3535

3636
// Look for cached data, then run the scraper if needed
37-
data, status, date, expires, found := profileSearchCache.GetRecord([]string{region, query, searchTypeQueryParam[0], fmt.Sprint(page)})
37+
data, status, date, expires, found := profileSearchCache.GetRecord([]string{region, query, searchTypeAsString, fmt.Sprint(page)})
3838
if !found {
3939
data, status = scrapers.ScrapeAdventurerSearch(region, query, searchType, page)
4040

@@ -47,7 +47,7 @@ func getAdventurerSearch(w http.ResponseWriter, r *http.Request) {
4747
return
4848
}
4949

50-
date, expires = profileSearchCache.AddRecord([]string{region, query, searchTypeQueryParam[0], fmt.Sprint(page)}, data, status)
50+
date, expires = profileSearchCache.AddRecord([]string{region, query, searchTypeAsString, fmt.Sprint(page)}, data, status)
5151
}
5252

5353
w.Header().Set("Date", date)
+4-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package validators
22

3-
func ValidateSearchTypeQueryParam(query []string) (searchType uint8) {
3+
func ValidateSearchTypeQueryParam(query []string) (searchType uint8, searchTypeAsString string) {
44
if 1 > len(query) {
5-
return 2
5+
return 2, "familyName"
66
}
77

88
if query[0] == "characterName" {
9-
return map[string]uint8{
10-
"characterName": 1,
11-
"familyName": 2,
12-
}[query[0]]
9+
return 1, "characterName"
1310
}
1411

15-
return 2
12+
return 2, "familyName"
1613
}

validators/ValidateSearchTypeQueryParam_test.go

+10-9
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@ import "testing"
44

55
func TestValidateSearchTypeQueryParam(t *testing.T) {
66
tests := []struct {
7-
expected uint8
8-
input []string
7+
expectedNum uint8
8+
expectedStr string
9+
input []string
910
}{
10-
{input: []string{}, expected: 2},
11-
{input: []string{"characterName"}, expected: 1},
12-
{input: []string{"invalidType"}, expected: 2},
13-
{input: []string{"familyName"}, expected: 2},
11+
{input: []string{}, expectedNum: 2, expectedStr: "familyName"},
12+
{input: []string{"characterName"}, expectedNum: 1, expectedStr: "characterName"},
13+
{input: []string{"invalidType"}, expectedNum: 2, expectedStr: "familyName"},
14+
{input: []string{"familyName"}, expectedNum: 2, expectedStr: "familyName"},
1415
}
1516

1617
for _, test := range tests {
17-
result := ValidateSearchTypeQueryParam(test.input)
18-
if result != test.expected {
19-
t.Errorf("For input %v, expected %v, but got %v", test.input, test.expected, result)
18+
resultNum, resultStr := ValidateSearchTypeQueryParam(test.input)
19+
if resultNum != test.expectedNum || resultStr != test.expectedStr {
20+
t.Errorf("For input %v, expected %v %v, but got %v %v", test.input, test.expectedNum, test.expectedStr, resultNum, resultStr)
2021
}
2122
}
2223
}

0 commit comments

Comments
 (0)