Skip to content

Commit 2b9f691

Browse files
committed
one-liner implementation for our HTTPHandler
1 parent db0d1a5 commit 2b9f691

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

http_request_renderable.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type HTTPHandler struct {
3535

3636
// ServeHTTP implements http.Handler.
3737
func (h HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
38-
renderable, _, err := h.Renderable.RequestRenderable(r)
38+
renderable, next, err := h.Renderable.RequestRenderable(r)
3939
if err != nil {
4040
panic(err)
4141
}
@@ -45,8 +45,13 @@ func (h HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
4545
panic(err)
4646
}
4747

48+
if next != nil {
49+
next.ServeHTTP(w, r)
50+
}
51+
4852
_, err = w.Write([]byte(html))
4953
if err != nil {
5054
panic(err)
5155
}
56+
5257
}

http_request_test.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,21 @@ func HTML(renderable RequestRenderable) http.Handler {
3434
}
3535

3636
func TestRequestRequestHandler(t *testing.T) {
37+
var statusCode = func(code int) http.Handler {
38+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
39+
w.WriteHeader(code)
40+
})
41+
}
42+
3743
var empty = RequestRenderableFunc(func(r *http.Request) (AsRenderable, http.Handler, error) {
38-
return nil, nil, nil
44+
switch r.URL.Query().Get("not_found") {
45+
case "default":
46+
return nil, http.NotFoundHandler(), nil
47+
case "nil_404":
48+
return nil, statusCode(http.StatusNotFound), nil
49+
default:
50+
return nil, nil, nil
51+
}
3952
})
4053

4154
mux := http.NewServeMux()
@@ -85,6 +98,18 @@ func TestRequestRequestHandler(t *testing.T) {
8598
assert.Equal(t, 200, code)
8699
})
87100

101+
t.Run("empty handler can 404", func(t *testing.T) {
102+
body, code, _ := sendRequest(t, "/empty?not_found=default")
103+
assert.Equal(t, "404 page not found\n", body)
104+
assert.Equal(t, 404, code)
105+
})
106+
107+
t.Run("empty handler can 404 and nil", func(t *testing.T) {
108+
body, code, _ := sendRequest(t, "/empty?not_found=nil_404")
109+
assert.Equal(t, "", body)
110+
assert.Equal(t, 404, code)
111+
})
112+
88113
t.Run("person renders (name=Stan)", func(t *testing.T) {
89114
body, code, _ := sendRequest(t, "/person?name=Stan")
90115
assert.Equal(t, "<div>Hi, Stan.</div>", body)

0 commit comments

Comments
 (0)