-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathseed_test.go
113 lines (87 loc) · 2.8 KB
/
seed_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
107
108
109
110
111
112
113
package main
import (
"encoding/json"
"net/http"
"net/http/httptest"
"sort"
"strconv"
"strings"
"testing"
"github.com/julienschmidt/httprouter"
"github.com/stretchr/testify/assert"
)
func TestSeed(t *testing.T) {
db := newDatabase(t, "user1", "user2")
defer db.Close()
r := httprouter.New()
newServer(db, "", "", r)
_ = addSeed(t, r, "user1", `["foo", "bar", "baz"]`) &&
addSeed(t, r, "user1", `["bar", "baz", "quux"]`) &&
addSeed(t, r, "user2", `["fred", "barney"]`) &&
testListSeed(t, r, "user1", "foo", "bar", "baz", "quux") &&
testListSeed(t, r, "user2", "fred", "barney") &&
testNumPositives(t, r, "user1", 4) &&
testNumPositives(t, r, "user2", 2) &&
removeSeed(t, r, "user1", "foo", http.StatusOK) &&
removeSeed(t, r, "user1", "foo", http.StatusNotFound) &&
removeSeed(t, r, "user2", "bar", http.StatusNotFound) &&
testPurge(t, r, "user1") &&
testPurge(t, r, "user2")
}
func addSeed(t *testing.T, r *httprouter.Router, username, ids string) bool {
t.Helper()
req := httptest.NewRequest("POST", "/seed", strings.NewReader(ids))
req.Header.Set("X-User", username)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
return assert.Equal(t, http.StatusOK, w.Result().StatusCode)
}
func testListSeed(t *testing.T, r *httprouter.Router, username string, expect ...string) bool {
t.Helper()
req := httptest.NewRequest("GET", "/seed", nil)
req.Header.Set("X-User", username)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
res := w.Result()
if !assert.Equal(t, http.StatusOK, res.StatusCode) {
return false
}
var actual []string
err := json.NewDecoder(res.Body).Decode(&actual)
assert.Nil(t, err)
sort.Strings(actual)
sort.Strings(expect)
return assert.Equal(t, expect, actual)
}
func testNumPositives(t *testing.T, r *httprouter.Router, username string, expect int) bool {
t.Helper()
req := httptest.NewRequest("GET", "/positive/num", nil)
req.Header.Set("X-User", username)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
if !assert.Equal(t, http.StatusOK, w.Result().StatusCode) {
return false
}
n, err := strconv.Atoi(w.Body.String())
return assert.Nil(t, err) && assert.Equal(t, expect, n)
}
func removeSeed(t *testing.T, r *httprouter.Router, username, id string, status int) bool {
t.Helper()
req := httptest.NewRequest("DELETE", "/seed/"+id, nil)
req.Header.Set("X-User", username)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
res := w.Result()
return assert.Equal(t, status, res.StatusCode)
}
// Purge should empty the seed set.
func testPurge(t *testing.T, r *httprouter.Router, username string) bool {
t.Helper()
req := httptest.NewRequest("GET", "/purge", nil)
req.Header.Set("X-User", username)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
res := w.Result()
return assert.Equal(t, http.StatusOK, res.StatusCode) &&
testListSeed(t, r, username)
}