@@ -1124,6 +1124,15 @@ func TestDefaultHTTPErrorHandler(t *testing.T) {
11241124 "error" : "stackinfo" ,
11251125 })
11261126 })
1127+ e .Any ("/early-return" , func (c Context ) error {
1128+ c .String (http .StatusOK , "OK" )
1129+ return errors .New ("ERROR" )
1130+ })
1131+ e .GET ("/internal-error" , func (c Context ) error {
1132+ err := errors .New ("internal error message body" )
1133+ return NewHTTPError (http .StatusBadRequest ).SetInternal (err )
1134+ })
1135+
11271136 // With Debug=true plain response contains error message
11281137 c , b := request (http .MethodGet , "/plain" , e )
11291138 assert .Equal (t , http .StatusInternalServerError , c )
@@ -1136,6 +1145,14 @@ func TestDefaultHTTPErrorHandler(t *testing.T) {
11361145 c , b = request (http .MethodGet , "/servererror" , e )
11371146 assert .Equal (t , http .StatusInternalServerError , c )
11381147 assert .Equal (t , "{\n \" code\" : 33,\n \" error\" : \" stackinfo\" ,\n \" message\" : \" Something bad happened\" \n }\n " , b )
1148+ // if the body is already set HTTPErrorHandler should not add anything to response body
1149+ c , b = request (http .MethodGet , "/early-return" , e )
1150+ assert .Equal (t , http .StatusOK , c )
1151+ assert .Equal (t , "OK" , b )
1152+ // internal error should be reflected in the message
1153+ c , b = request (http .MethodGet , "/internal-error" , e )
1154+ assert .Equal (t , http .StatusBadRequest , c )
1155+ assert .Equal (t , "{\n \" error\" : \" code=400, message=Bad Request, internal=internal error message body\" ,\n \" message\" : \" Bad Request\" \n }\n " , b )
11391156
11401157 e .Debug = false
11411158 // With Debug=false the error response is shortened
0 commit comments