From 682ac11958fed286bb0ca4d488084953f50779ef Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Sun, 10 Dec 2017 18:15:27 -0800 Subject: [PATCH] Log unexpected responses in integration tests (#3138) * Log flash error message in integration tests * Also log short, non-HTML responses --- integrations/integration_test.go | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/integrations/integration_test.go b/integrations/integration_test.go index f9e0d5f13c0..d8e97395fa7 100644 --- a/integrations/integration_test.go +++ b/integrations/integration_test.go @@ -26,6 +26,7 @@ import ( "code.gitea.io/gitea/routers" "code.gitea.io/gitea/routers/routes" + "github.com/PuerkitoBio/goquery" "github.com/Unknwon/com" "github.com/stretchr/testify/assert" "gopkg.in/macaron.v1" @@ -260,12 +261,37 @@ func MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *httptest. recorder := httptest.NewRecorder() mac.ServeHTTP(recorder, req) if expectedStatus != NoExpectedStatus { - assert.EqualValues(t, expectedStatus, recorder.Code, - "Request: %s %s", req.Method, req.URL.String()) + if !assert.EqualValues(t, expectedStatus, recorder.Code, + "Request: %s %s", req.Method, req.URL.String()) { + logUnexpectedResponse(t, recorder) + } } return recorder } +// logUnexpectedResponse logs the contents of an unexpected response. +func logUnexpectedResponse(t testing.TB, recorder *httptest.ResponseRecorder) { + respBytes := recorder.Body.Bytes() + if len(respBytes) == 0 { + return + } else if len(respBytes) < 500 { + // if body is short, just log the whole thing + t.Log("Response:", string(respBytes)) + return + } + + // log the "flash" error message, if one exists + // we must create a new buffer, so that we don't "use up" resp.Body + htmlDoc, err := goquery.NewDocumentFromReader(bytes.NewBuffer(respBytes)) + if err != nil { + return // probably a non-HTML response + } + errMsg := htmlDoc.Find(".ui.negative.message").Text() + if len(errMsg) > 0 { + t.Log("A flash error message was found:", errMsg) + } +} + func DecodeJSON(t testing.TB, resp *httptest.ResponseRecorder, v interface{}) { decoder := json.NewDecoder(resp.Body) assert.NoError(t, decoder.Decode(v))