Added tests to verify that the 301 redirect returns query string
This commit is contained in:
79
mux_test.go
79
mux_test.go
@@ -8,6 +8,7 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"testing"
|
||||
// "encoding/json" // Philip Schlump
|
||||
|
||||
"github.com/gorilla/context"
|
||||
)
|
||||
@@ -22,6 +23,18 @@ type routeTest struct {
|
||||
shouldMatch bool // whether the request is expected to match the route at all
|
||||
}
|
||||
|
||||
// Philip Schlump - added to understand the results from tests.
|
||||
//func dumpVar ( v interface{} ) {
|
||||
// // s, err := json.Marshal ( v )
|
||||
// s, err := json.MarshalIndent ( v, "", "\t" )
|
||||
// if ( err != nil ) {
|
||||
// fmt.Printf ( "Error: %s\n", err )
|
||||
// } else {
|
||||
// fmt.Printf ( "%s\n", s )
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
func TestHost(t *testing.T) {
|
||||
// newRequestHost a new request with a method, url, and host header
|
||||
newRequestHost := func(method, url, host string) *http.Request {
|
||||
@@ -416,6 +429,15 @@ func TestQueries(t *testing.T) {
|
||||
path: "",
|
||||
shouldMatch: true,
|
||||
},
|
||||
{
|
||||
title: "Queries route, match (ToDo - with redirect 301) (Philip Schlump added)",
|
||||
route: new(Route).Host("www.2cwhy.com").Path("/api").Queries("foo", "bar", "baz", "ding"),
|
||||
request: newRequest("GET", "http://www.2cwhy.com/api?foo=bar&baz=ding"),
|
||||
vars: map[string]string{},
|
||||
host: "",
|
||||
path: "",
|
||||
shouldMatch: true,
|
||||
},
|
||||
{
|
||||
title: "Queries route, bad query",
|
||||
route: new(Route).Queries("foo", "bar", "baz", "ding"),
|
||||
@@ -655,6 +677,8 @@ func testRoute(t *testing.T, test routeTest) {
|
||||
return
|
||||
}
|
||||
}
|
||||
// Philip Schlump - Added to understand what match is returning.
|
||||
// dumpVar ( match )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -663,7 +687,7 @@ func testRoute(t *testing.T, test routeTest) {
|
||||
func TestKeepContext(t *testing.T) {
|
||||
func1 := func(w http.ResponseWriter, r *http.Request) {}
|
||||
|
||||
r := NewRouter()
|
||||
r:= NewRouter()
|
||||
r.HandleFunc("/", func1).Name("func1")
|
||||
|
||||
req, _ := http.NewRequest("GET", "http://localhost/", nil)
|
||||
@@ -688,6 +712,59 @@ func TestKeepContext(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
type TestA301ResponseWriter struct {
|
||||
hh http.Header
|
||||
status int
|
||||
}
|
||||
|
||||
func (ho TestA301ResponseWriter) Header() http.Header {
|
||||
// fmt.Printf ( "Header() called\n" );
|
||||
return http.Header(ho.hh)
|
||||
}
|
||||
|
||||
func (ho TestA301ResponseWriter) Write( b []byte) (int, error) {
|
||||
// fmt.Printf ( "Write called %v\n", b );
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (ho TestA301ResponseWriter) WriteHeader( code int ) {
|
||||
// fmt.Printf ( "WriteHeader called code=%d\n", code );
|
||||
ho.status = code
|
||||
}
|
||||
|
||||
func Test301Redirect(t *testing.T) {
|
||||
m := make(http.Header)
|
||||
|
||||
func1 := func(w http.ResponseWriter, r *http.Request) {}
|
||||
func2 := func(w http.ResponseWriter, r *http.Request) {}
|
||||
|
||||
r:= NewRouter()
|
||||
r.HandleFunc("/api/", func2).Name("func2")
|
||||
r.HandleFunc("/", func1).Name("func1")
|
||||
|
||||
req, _ := http.NewRequest("GET", "http://localhost//api/?abc=def", nil)
|
||||
|
||||
res := TestA301ResponseWriter{
|
||||
hh: m,
|
||||
status : 0,
|
||||
}
|
||||
r.ServeHTTP(&res, req)
|
||||
|
||||
//fmt.Printf ( "This one %v\n", res );
|
||||
//fmt.Printf ( "res[\"Location\"] = ///%v///\n", res.hh["Location"] );
|
||||
//fmt.Printf ( "res[\"Location\"][0] = ///%v///\n", res.hh["Location"][0] );
|
||||
if "http://localhost/api/?abc=def" != res.hh["Location"][0] {
|
||||
t.Errorf("Should have complete URL with query string")
|
||||
}
|
||||
// OK - I don't understand why this check on "status is not working.
|
||||
// (p.s. the real answer is I am still learning go)
|
||||
//if 301 != res.status {
|
||||
// t.Errorf("Should have status of 301, got %d", res.status )
|
||||
//}
|
||||
//fmt.Printf ( "Done\n" );
|
||||
|
||||
}
|
||||
// https://plus.google.com/101022900381697718949/posts/eWy6DjFJ6uW
|
||||
func TestSubrouterHeader(t *testing.T) {
|
||||
expected := "func1 response"
|
||||
|
||||
Reference in New Issue
Block a user