-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver_test.go
66 lines (51 loc) · 1.29 KB
/
server_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"encoding/json"
"errors"
"net/http"
"net/http/httptest"
"testing"
)
type MockExpander struct {
result string
err error
}
func (ex MockExpander) ExpandUrl(shortenedUrl string) (string, error) {
return ex.result, ex.err
}
func TestExpandHandler(t *testing.T) {
shortenedUrl := "http://test.dev/shortened"
expandedUrl := "http://test.dev/expanded"
app := App{
Expander: MockExpander{
result: expandedUrl,
}}
req, err := http.NewRequest("GET", "/api/expand?url="+shortenedUrl, nil)
if err != nil {
t.Fatal(err)
}
response := httptest.NewRecorder()
app.expand(response, req)
if response.Code != 200 {
t.Fatalf("Response code %d invalid", response.Code)
}
var resp responseMessage
json.Unmarshal(response.Body.Bytes(), &resp)
expected := responseMessage{Original: shortenedUrl, Expanded: expandedUrl}
if resp != expected {
t.Fatalf("Invalid response returned %s", response.Body.String())
}
// test failing UrlExpander
app.Expander = MockExpander{
err: errors.New("Generic error"),
}
response = httptest.NewRecorder()
app.expand(response, req)
if response.Code != 500 {
t.Fatalf("Response code %d invalid", response.Code)
}
json.Unmarshal(response.Body.Bytes(), &resp)
if resp.Error == "" {
t.Fatal("Expected non-empty error message")
}
}