1package assert 2 3import ( 4 "fmt" 5 "net/http" 6 "net/url" 7 "testing" 8) 9 10func httpOK(w http.ResponseWriter, r *http.Request) { 11 w.WriteHeader(http.StatusOK) 12} 13 14func httpRedirect(w http.ResponseWriter, r *http.Request) { 15 w.WriteHeader(http.StatusTemporaryRedirect) 16} 17 18func httpError(w http.ResponseWriter, r *http.Request) { 19 w.WriteHeader(http.StatusInternalServerError) 20} 21 22func TestHTTPSuccess(t *testing.T) { 23 assert := New(t) 24 25 mockT1 := new(testing.T) 26 assert.Equal(HTTPSuccess(mockT1, httpOK, "GET", "/", nil), true) 27 assert.False(mockT1.Failed()) 28 29 mockT2 := new(testing.T) 30 assert.Equal(HTTPSuccess(mockT2, httpRedirect, "GET", "/", nil), false) 31 assert.True(mockT2.Failed()) 32 33 mockT3 := new(testing.T) 34 assert.Equal(HTTPSuccess(mockT3, httpError, "GET", "/", nil), false) 35 assert.True(mockT3.Failed()) 36} 37 38func TestHTTPRedirect(t *testing.T) { 39 assert := New(t) 40 41 mockT1 := new(testing.T) 42 assert.Equal(HTTPRedirect(mockT1, httpOK, "GET", "/", nil), false) 43 assert.True(mockT1.Failed()) 44 45 mockT2 := new(testing.T) 46 assert.Equal(HTTPRedirect(mockT2, httpRedirect, "GET", "/", nil), true) 47 assert.False(mockT2.Failed()) 48 49 mockT3 := new(testing.T) 50 assert.Equal(HTTPRedirect(mockT3, httpError, "GET", "/", nil), false) 51 assert.True(mockT3.Failed()) 52} 53 54func TestHTTPError(t *testing.T) { 55 assert := New(t) 56 57 mockT1 := new(testing.T) 58 assert.Equal(HTTPError(mockT1, httpOK, "GET", "/", nil), false) 59 assert.True(mockT1.Failed()) 60 61 mockT2 := new(testing.T) 62 assert.Equal(HTTPError(mockT2, httpRedirect, "GET", "/", nil), false) 63 assert.True(mockT2.Failed()) 64 65 mockT3 := new(testing.T) 66 assert.Equal(HTTPError(mockT3, httpError, "GET", "/", nil), true) 67 assert.False(mockT3.Failed()) 68} 69 70func TestHTTPStatusesWrapper(t *testing.T) { 71 assert := New(t) 72 mockAssert := New(new(testing.T)) 73 74 assert.Equal(mockAssert.HTTPSuccess(httpOK, "GET", "/", nil), true) 75 assert.Equal(mockAssert.HTTPSuccess(httpRedirect, "GET", "/", nil), false) 76 assert.Equal(mockAssert.HTTPSuccess(httpError, "GET", "/", nil), false) 77 78 assert.Equal(mockAssert.HTTPRedirect(httpOK, "GET", "/", nil), false) 79 assert.Equal(mockAssert.HTTPRedirect(httpRedirect, "GET", "/", nil), true) 80 assert.Equal(mockAssert.HTTPRedirect(httpError, "GET", "/", nil), false) 81 82 assert.Equal(mockAssert.HTTPError(httpOK, "GET", "/", nil), false) 83 assert.Equal(mockAssert.HTTPError(httpRedirect, "GET", "/", nil), false) 84 assert.Equal(mockAssert.HTTPError(httpError, "GET", "/", nil), true) 85} 86 87func httpHelloName(w http.ResponseWriter, r *http.Request) { 88 name := r.FormValue("name") 89 w.Write([]byte(fmt.Sprintf("Hello, %s!", name))) 90} 91 92func TestHTTPRequestWithNoParams(t *testing.T) { 93 var got *http.Request 94 handler := func(w http.ResponseWriter, r *http.Request) { 95 got = r 96 w.WriteHeader(http.StatusOK) 97 } 98 99 True(t, HTTPSuccess(t, handler, "GET", "/url", nil)) 100 101 Empty(t, got.URL.Query()) 102 Equal(t, "/url", got.URL.RequestURI()) 103} 104 105func TestHTTPRequestWithParams(t *testing.T) { 106 var got *http.Request 107 handler := func(w http.ResponseWriter, r *http.Request) { 108 got = r 109 w.WriteHeader(http.StatusOK) 110 } 111 params := url.Values{} 112 params.Add("id", "12345") 113 114 True(t, HTTPSuccess(t, handler, "GET", "/url", params)) 115 116 Equal(t, url.Values{"id": []string{"12345"}}, got.URL.Query()) 117 Equal(t, "/url?id=12345", got.URL.String()) 118 Equal(t, "/url?id=12345", got.URL.RequestURI()) 119} 120 121func TestHttpBody(t *testing.T) { 122 assert := New(t) 123 mockT := new(testing.T) 124 125 assert.True(HTTPBodyContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!")) 126 assert.True(HTTPBodyContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World")) 127 assert.False(HTTPBodyContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world")) 128 129 assert.False(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!")) 130 assert.False(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World")) 131 assert.True(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world")) 132} 133 134func TestHttpBodyWrappers(t *testing.T) { 135 assert := New(t) 136 mockAssert := New(new(testing.T)) 137 138 assert.True(mockAssert.HTTPBodyContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!")) 139 assert.True(mockAssert.HTTPBodyContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World")) 140 assert.False(mockAssert.HTTPBodyContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world")) 141 142 assert.False(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!")) 143 assert.False(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World")) 144 assert.True(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world")) 145 146} 147