-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmock_test.go
51 lines (43 loc) · 1.28 KB
/
mock_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
package dispatcher_test
import (
"fmt"
"net/http"
"net/http/httptest"
"regexp"
"strconv"
"strings"
)
// pageAddr contains page route part of URL
const pageAddr = "/page"
// mockServer is a mock server
type mockServer struct{ *httptest.Server }
// imitation is a server route treating imitation
func (server *mockServer) imitation(w http.ResponseWriter, r *http.Request) {
if strings.Contains(r.RequestURI, pageAddr) && r.Method == http.MethodGet {
server.getPageImitation(w, r)
return
}
}
// getPageImitation is an imitation for getting the page
func (server *mockServer) getPageImitation(w http.ResponseWriter, r *http.Request) {
s := regexp.MustCompile(fmt.Sprintf(`%s(\d+)`, pageAddr)).FindStringSubmatch(r.RequestURI)
if len(s) < 2 {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "s: %s", s)
return
}
i, err := strconv.ParseInt(s[1], 10, 64)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "expected int, err: %v", err)
return
}
okAnswer := strings.Repeat("11 Go 22 33", int(i))
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, okAnswer)
}
// newMockServer returns a pointer to new mock server
func newMockServer() *mockServer {
var server mockServer
return &mockServer{Server: httptest.NewServer(http.HandlerFunc((&server).imitation))}
}