-
Notifications
You must be signed in to change notification settings - Fork 7
/
handler_test.go
106 lines (98 loc) · 2.01 KB
/
handler_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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package jhop
import (
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
const (
file = `
{
"profile": {
"name": "foo"
},
"recipes": [{
"difficulty": "hard",
"id": 1,
"prep_time": "1h"
}, {
"difficulty": "easy",
"id": 2,
"prep_time": "15m"
}]
}
`
)
func TestNewServer(t *testing.T) {
type check struct {
req *http.Request
code int
content string
}
tests := []struct {
name string
file io.Reader
wantErr bool
checks []check
}{
{
name: "provide resources",
file: strings.NewReader(file),
wantErr: false,
checks: []check{
check{
req: httptest.NewRequest("GET", "http://localhost/recipes/1", nil),
code: 200,
content: "{\"difficulty\":\"hard\",\"id\":1,\"prep_time\":\"1h\"}",
},
check{
req: httptest.NewRequest("GET", "http://localhost/recipes/2", nil),
code: 200,
content: "{\"difficulty\":\"easy\",\"id\":2,\"prep_time\":\"15m\"}",
},
check{
req: httptest.NewRequest("GET", "http://localhost/recipes", nil),
code: 200,
content: file,
},
check{
req: httptest.NewRequest("GET", "http://localhost/recipes/3", nil),
code: 404,
content: "",
},
check{
req: httptest.NewRequest("GET", "http://localhost/profile/3", nil),
code: 404,
content: "",
},
},
},
{
name: "with error",
file: strings.NewReader("///"),
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
h, err := NewHandler(tt.file)
if tt.wantErr && err == nil {
t.Error("expected error")
return
}
for _, check := range tt.checks {
resp := httptest.NewRecorder()
h.ServeHTTP(resp, check.req)
if check.code != resp.Code {
t.Errorf("expected code: %d got %d", check.code, resp.Code)
return
}
body := resp.Body.String()
if strings.Contains(check.content, body) {
t.Errorf("expected body: %s got %s", check.content, body)
}
}
})
}
}