Skip to content

Commit bedf95e

Browse files
lwilesliamwiles
andauthored
fix: include HTTP response in RESTClient error (#123)
Co-authored-by: Liam Wiles <[email protected]>
1 parent b9c96cc commit bedf95e

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

api/rest_client.go

+10-4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ type RESTClient struct {
4949
BaseURL string
5050
}
5151

52+
type RESTClientError struct {
53+
HTTPResponse *http.Response
54+
Message string
55+
}
56+
57+
func (e *RESTClientError) Error() string {
58+
return fmt.Sprintf("HTTP %d: %s", e.HTTPResponse.StatusCode, e.Message)
59+
}
60+
5261
// RegisterStub registers a new stub for the given matcher/responder pair.
5362
func (c *RESTClient) RegisterStub(matcher Matcher, responder Responder) *RESTClient {
5463
c.Client.RegisterStub(matcher, responder)
@@ -91,10 +100,7 @@ func (c *RESTClient) DoWithContext(ctx context.Context, method string, url strin
91100

92101
success := resp.StatusCode >= 200 && resp.StatusCode < 300
93102
if !success {
94-
// defer resp.Body.Close()
95-
// api.HandleHTTPError(resp)
96-
// TODO: return a proper error type
97-
return fmt.Errorf("HTTP %d", resp.StatusCode)
103+
return &RESTClientError{resp, "received unsuccessful response"}
98104
}
99105

100106
if resp.StatusCode == http.StatusNoContent {

api/rest_client_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ func TestRESTClient_DoWithContext_SuccessError(t *testing.T) {
9797
defer client.VerifyStubs(t)
9898

9999
err := client.DoWithContext(ctx, http.MethodGet, "/greet", "", nil)
100-
assert.ErrorContains(t, err, "HTTP 500")
100+
myErr, ok := err.(*RESTClientError)
101+
assert.True(t, ok)
102+
assert.Equal(t, 500, myErr.HTTPResponse.StatusCode)
103+
assert.ErrorContains(t, err, "HTTP 500: received unsuccessful response")
101104
}
102105

103106
func TestRESTClient_DoWithContext_NoContent(t *testing.T) {

0 commit comments

Comments
 (0)