From 7cf1886df5f6041449ca082701c05bb5eb13100e Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Thu, 27 Jan 2022 14:41:10 +0300 Subject: [PATCH] Fix NewErrors() and Improve NewError() (#1728) * fix new errors * fix tests * removed new errors tests * changed error message type * fixed NewError test * added NewErrors function * added Test_NewErrors * added comment line * refactor: Sprintf changed with Sprint --- app.go | 40 ++++++++++++++-------------------------- app_test.go | 13 ++++++------- 2 files changed, 20 insertions(+), 33 deletions(-) diff --git a/app.go b/app.go index c273cad489..a81fcd82c2 100644 --- a/app.go +++ b/app.go @@ -84,8 +84,8 @@ type ErrorHandler = func(*Ctx, error) error // Error represents an error that occurred while handling a request. type Error struct { - Code int `json:"code"` - Message string `json:"message"` + Code int `json:"code"` + Message interface{} `json:"message"` } // App denotes the Fiber application. @@ -715,43 +715,31 @@ func (app *App) Route(prefix string, fn func(router Router), name ...string) Rou // Error makes it compatible with the `error` interface. func (e *Error) Error() string { - return e.Message + return fmt.Sprint(e.Message) } // NewError creates a new Error instance with an optional message -func NewError(code int, message ...string) *Error { +func NewError(code int, message ...interface{}) *Error { e := &Error{ - Code: code, + Code: code, + Message: utils.StatusMessage(code), } if len(message) > 0 { e.Message = message[0] - } else { - e.Message = utils.StatusMessage(code) } return e } -// NewErrors creates multiple new Errors instance with some message -func NewErrors(code int, messages ...string) []*Error { - var errors []*Error +// NewErrors creates multiple new Error messages +func NewErrors(code int, messages ...interface{}) *Error { + e := &Error{ + Code: code, + Message: utils.StatusMessage(code), + } if len(messages) > 0 { - for _, message := range messages { - e := &Error{ - Code: code, - } - e.Message = message - errors = append(errors, e) - } - } else { - // Use default messages - e := &Error{ - Code: code, - } - e.Message = utils.StatusMessage(code) - errors = append(errors, e) + e.Message = messages } - - return errors + return e } // Listener can be used to pass a custom listener. diff --git a/app_test.go b/app_test.go index 635d3304c0..3af90a9b37 100644 --- a/app_test.go +++ b/app_test.go @@ -1212,16 +1212,15 @@ func Benchmark_App_ETag_Weak(b *testing.B) { func Test_NewError(t *testing.T) { e := NewError(StatusForbidden, "permission denied") utils.AssertEqual(t, StatusForbidden, e.Code) - utils.AssertEqual(t, "permission denied", e.Message) + utils.AssertEqual(t, "permission denied", fmt.Sprint(e.Message)) } func Test_NewErrors(t *testing.T) { - errors := NewErrors(StatusBadRequest, []string{"error 1", "error 2"}...) - utils.AssertEqual(t, StatusBadRequest, errors[0].Code) - utils.AssertEqual(t, "error 1", errors[0].Message) - - utils.AssertEqual(t, StatusBadRequest, errors[1].Code) - utils.AssertEqual(t, "error 2", errors[1].Message) + e := NewErrors(StatusBadRequest, "error 1", "error 2") + messages := e.Message.([]interface{}) + utils.AssertEqual(t, StatusBadRequest, e.Code) + utils.AssertEqual(t, "error 1", fmt.Sprint(messages[0])) + utils.AssertEqual(t, "error 2", fmt.Sprint(messages[1])) } // go test -run Test_Test_Timeout