httpx.Error response without body (#982)

* httpx.Error support response without body

* fix doc
master
Vee Zhang 3 years ago committed by GitHub
parent 423955c55f
commit 76fc1ef460
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -90,7 +90,7 @@ After that, run these local verifications before submitting pull request to pred
fail of continuous integration. fail of continuous integration.
* Format the code with `gofmt` * Format the code with `gofmt`
* Run the test with data race enabled `go test -race ./` * Run the test with data race enabled `go test -race ./...`
## Code Review ## Code Review

@ -25,6 +25,11 @@ func Error(w http.ResponseWriter, err error) {
} }
code, body := errorHandler(err) code, body := errorHandler(err)
if body == nil {
w.WriteHeader(code)
return
}
e, ok := body.(error) e, ok := body.(error)
if ok { if ok {
http.Error(w, e.Error(), code) http.Error(w, e.Error(), code)

@ -25,17 +25,19 @@ func TestError(t *testing.T) {
) )
tests := []struct { tests := []struct {
name string name string
input string input string
errorHandler func(error) (int, interface{}) errorHandler func(error) (int, interface{})
expectBody string expectHaveBody bool
expectCode int expectBody string
expectCode int
}{ }{
{ {
name: "default error handler", name: "default error handler",
input: body, input: body,
expectBody: body, expectHaveBody: true,
expectCode: http.StatusBadRequest, expectBody: body,
expectCode: http.StatusBadRequest,
}, },
{ {
name: "customized error handler return string", name: "customized error handler return string",
@ -43,8 +45,9 @@ func TestError(t *testing.T) {
errorHandler: func(err error) (int, interface{}) { errorHandler: func(err error) (int, interface{}) {
return http.StatusForbidden, err.Error() return http.StatusForbidden, err.Error()
}, },
expectBody: wrappedBody, expectHaveBody: true,
expectCode: http.StatusForbidden, expectBody: wrappedBody,
expectCode: http.StatusForbidden,
}, },
{ {
name: "customized error handler return error", name: "customized error handler return error",
@ -52,8 +55,19 @@ func TestError(t *testing.T) {
errorHandler: func(err error) (int, interface{}) { errorHandler: func(err error) (int, interface{}) {
return http.StatusForbidden, err return http.StatusForbidden, err
}, },
expectBody: body, expectHaveBody: true,
expectCode: http.StatusForbidden, expectBody: body,
expectCode: http.StatusForbidden,
},
{
name: "customized error handler return nil",
input: body,
errorHandler: func(err error) (int, interface{}) {
return http.StatusForbidden, nil
},
expectHaveBody: false,
expectBody: "",
expectCode: http.StatusForbidden,
}, },
} }
@ -75,6 +89,7 @@ func TestError(t *testing.T) {
} }
Error(&w, errors.New(test.input)) Error(&w, errors.New(test.input))
assert.Equal(t, test.expectCode, w.code) assert.Equal(t, test.expectCode, w.code)
assert.Equal(t, test.expectHaveBody, w.haveBody)
assert.Equal(t, test.expectBody, strings.TrimSpace(w.builder.String())) assert.Equal(t, test.expectBody, strings.TrimSpace(w.builder.String()))
}) })
} }
@ -122,6 +137,7 @@ func TestWriteJsonLessWritten(t *testing.T) {
type tracedResponseWriter struct { type tracedResponseWriter struct {
headers map[string][]string headers map[string][]string
builder strings.Builder builder strings.Builder
haveBody bool
code int code int
lessWritten bool lessWritten bool
timeout bool timeout bool
@ -140,6 +156,7 @@ func (w *tracedResponseWriter) Write(bytes []byte) (n int, err error) {
if w.lessWritten { if w.lessWritten {
n -= 1 n -= 1
} }
w.haveBody = true
return return
} }

Loading…
Cancel
Save