- Modified ResponseHelper.Body signature to return an io.Reader and an error. - Updated ResponseHandler.ServeHTTP to handle errors from ResponseHelper.Body. - Implemented JSONResponse and JSONResponseWithStatus functions for easier JSON responses. - Added comprehensive unit tests for JSON response handling, including error scenarios. - Extended Helper.ResponderHandler with a new test case to ensure proper error handling and response generation. - Resolved linting issues related to dynamic error definition and function length in tests.
76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
package ezhandler_test
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"codeberg.org/danjones000/ezhandler"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var (
|
|
errTest = errors.New("test error")
|
|
)
|
|
|
|
func TestNewHelper(t *testing.T) {
|
|
mockErrorHandler := func(w http.ResponseWriter, r *http.Request, err error) {}
|
|
helper := ezhandler.NewHelper(mockErrorHandler)
|
|
assert.NotNil(t, helper)
|
|
}
|
|
|
|
func runHelperTest(t *testing.T, name string, handlerErr, expectedErr error, expectedErrorHandlerCalled bool, handlerType string) {
|
|
t.Run(name, func(t *testing.T) {
|
|
var errorHandlerCalled bool
|
|
mockErrorHandler := func(w http.ResponseWriter, r *http.Request, err error) {
|
|
errorHandlerCalled = true
|
|
assert.Equal(t, expectedErr, err)
|
|
}
|
|
helper := ezhandler.NewHelper(mockErrorHandler)
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/", http.NoBody)
|
|
rec := httptest.NewRecorder()
|
|
|
|
var wrappedHandler http.Handler
|
|
switch handlerType {
|
|
case "Handler":
|
|
mockHandler := ezhandler.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error {
|
|
return handlerErr
|
|
})
|
|
wrappedHandler = helper.Handler(mockHandler)
|
|
case "HandlerFunc":
|
|
mockHandlerFunc := ezhandler.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error {
|
|
return handlerErr
|
|
})
|
|
wrappedHandler = helper.HandlerFunc(mockHandlerFunc)
|
|
case "ResponderHandler":
|
|
mockResponseHandler := ezhandler.ResponseHandler(func(r *http.Request) (ezhandler.ResponseHelper, error) {
|
|
if handlerErr != nil {
|
|
return nil, handlerErr
|
|
}
|
|
return ezhandler.JSONResponse(map[string]string{"status": "ok"}), nil
|
|
})
|
|
wrappedHandler = helper.ResponderHandler(mockResponseHandler)
|
|
}
|
|
|
|
wrappedHandler.ServeHTTP(rec, req)
|
|
|
|
assert.Equal(t, expectedErrorHandlerCalled, errorHandlerCalled)
|
|
})
|
|
}
|
|
|
|
func TestHelper_Handler(t *testing.T) {
|
|
runHelperTest(t, "no error", nil, nil, false, "Handler")
|
|
runHelperTest(t, "with error", errTest, errTest, true, "Handler")
|
|
}
|
|
|
|
func TestHelper_HandlerFunc(t *testing.T) {
|
|
runHelperTest(t, "no error", nil, nil, false, "HandlerFunc")
|
|
runHelperTest(t, "with error", errTest, errTest, true, "HandlerFunc")
|
|
}
|
|
|
|
func TestHelper_ResponderHandler(t *testing.T) {
|
|
runHelperTest(t, "no error", nil, nil, false, "ResponderHandler")
|
|
runHelperTest(t, "with error", errTest, errTest, true, "ResponderHandler")
|
|
}
|