1 package middleware
2
3 import (
4 "net/http"
5 "net/http/httptest"
6 "testing"
7
8 "github.com/go-chi/chi"
9 )
10
11 func TestGetHead(t *testing.T) {
12 r := chi.NewRouter()
13 r.Use(GetHead)
14 r.Get("/hi", func(w http.ResponseWriter, r *http.Request) {
15 w.Header().Set("X-Test", "yes")
16 w.Write([]byte("bye"))
17 })
18 r.Route("/articles", func(r chi.Router) {
19 r.Get("/{id}", func(w http.ResponseWriter, r *http.Request) {
20 id := chi.URLParam(r, "id")
21 w.Header().Set("X-Article", id)
22 w.Write([]byte("article:" + id))
23 })
24 })
25 r.Route("/users", func(r chi.Router) {
26 r.Head("/{id}", func(w http.ResponseWriter, r *http.Request) {
27 w.Header().Set("X-User", "-")
28 w.Write([]byte("user"))
29 })
30 r.Get("/{id}", func(w http.ResponseWriter, r *http.Request) {
31 id := chi.URLParam(r, "id")
32 w.Header().Set("X-User", id)
33 w.Write([]byte("user:" + id))
34 })
35 })
36
37 ts := httptest.NewServer(r)
38 defer ts.Close()
39
40 if _, body := testRequest(t, ts, "GET", "/hi", nil); body != "bye" {
41 t.Fatalf(body)
42 }
43 if req, body := testRequest(t, ts, "HEAD", "/hi", nil); body != "" || req.Header.Get("X-Test") != "yes" {
44 t.Fatalf(body)
45 }
46 if _, body := testRequest(t, ts, "GET", "/", nil); body != "404 page not found\n" {
47 t.Fatalf(body)
48 }
49 if req, body := testRequest(t, ts, "HEAD", "/", nil); body != "" || req.StatusCode != 404 {
50 t.Fatalf(body)
51 }
52
53 if _, body := testRequest(t, ts, "GET", "/articles/5", nil); body != "article:5" {
54 t.Fatalf(body)
55 }
56 if req, body := testRequest(t, ts, "HEAD", "/articles/5", nil); body != "" || req.Header.Get("X-Article") != "5" {
57 t.Fatalf("expecting X-Article header '5' but got '%s'", req.Header.Get("X-Article"))
58 }
59
60 if _, body := testRequest(t, ts, "GET", "/users/1", nil); body != "user:1" {
61 t.Fatalf(body)
62 }
63 if req, body := testRequest(t, ts, "HEAD", "/users/1", nil); body != "" || req.Header.Get("X-User") != "-" {
64 t.Fatalf("expecting X-User header '-' but got '%s'", req.Header.Get("X-User"))
65 }
66 }
67
View as plain text