| 1290 | } |
| 1291 | |
| 1292 | func TestDefaultHTTPErrorHandler(t *testing.T) { |
| 1293 | var testCases = []struct { |
| 1294 | whenError error |
| 1295 | name string |
| 1296 | whenMethod string |
| 1297 | expectBody string |
| 1298 | expectLogged string |
| 1299 | expectStatus int |
| 1300 | givenExposeError bool |
| 1301 | givenLoggerFunc bool |
| 1302 | }{ |
| 1303 | { |
| 1304 | name: "ok, expose error = true, HTTPError, no wrapped err", |
| 1305 | givenExposeError: true, |
| 1306 | whenError: &HTTPError{Code: http.StatusTeapot, Message: "my_error"}, |
| 1307 | expectStatus: http.StatusTeapot, |
| 1308 | expectBody: `{"message":"my_error"}` + "\n", |
| 1309 | }, |
| 1310 | { |
| 1311 | name: "ok, expose error = true, HTTPError + wrapped error", |
| 1312 | givenExposeError: true, |
| 1313 | whenError: HTTPError{Code: http.StatusTeapot, Message: "my_error"}.Wrap(errors.New("internal_error")), |
| 1314 | expectStatus: http.StatusTeapot, |
| 1315 | expectBody: `{"error":"internal_error","message":"my_error"}` + "\n", |
| 1316 | }, |
| 1317 | { |
| 1318 | name: "ok, expose error = true, HTTPError + wrapped HTTPError", |
| 1319 | givenExposeError: true, |
| 1320 | whenError: HTTPError{Code: http.StatusTeapot, Message: "my_error"}.Wrap(&HTTPError{Code: http.StatusTeapot, Message: "early_error"}), |
| 1321 | expectStatus: http.StatusTeapot, |
| 1322 | expectBody: `{"error":"code=418, message=early_error","message":"my_error"}` + "\n", |
| 1323 | }, |
| 1324 | { |
| 1325 | name: "ok, expose error = false, HTTPError", |
| 1326 | whenError: &HTTPError{Code: http.StatusTeapot, Message: "my_error"}, |
| 1327 | expectStatus: http.StatusTeapot, |
| 1328 | expectBody: `{"message":"my_error"}` + "\n", |
| 1329 | }, |
| 1330 | { |
| 1331 | name: "ok, expose error = false, HTTPError, no message", |
| 1332 | whenError: &HTTPError{Code: http.StatusTeapot, Message: ""}, |
| 1333 | expectStatus: http.StatusTeapot, |
| 1334 | expectBody: `{"message":"I'm a teapot"}` + "\n", |
| 1335 | }, |
| 1336 | { |
| 1337 | name: "ok, expose error = false, HTTPError + internal HTTPError", |
| 1338 | whenError: HTTPError{Code: http.StatusTooEarly, Message: "my_error"}.Wrap(&HTTPError{Code: http.StatusTeapot, Message: "early_error"}), |
| 1339 | expectStatus: http.StatusTooEarly, |
| 1340 | expectBody: `{"message":"my_error"}` + "\n", |
| 1341 | }, |
| 1342 | { |
| 1343 | name: "ok, expose error = true, Error", |
| 1344 | givenExposeError: true, |
| 1345 | whenError: fmt.Errorf("my errors wraps: %w", errors.New("internal_error")), |
| 1346 | expectStatus: http.StatusInternalServerError, |
| 1347 | expectBody: `{"error":"my errors wraps: internal_error","message":"Internal Server Error"}` + "\n", |
| 1348 | }, |
| 1349 | { |