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
pull/1736/head
Eren BALCI 2022-01-27 14:41:10 +03:00 committed by GitHub
parent a51ec9bc69
commit 7cf1886df5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 34 deletions

42
app.go
View File

@ -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
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)
// NewErrors creates multiple new Error messages
func NewErrors(code int, messages ...interface{}) *Error {
e := &Error{
Code: code,
Message: utils.StatusMessage(code),
}
return errors
if len(messages) > 0 {
e.Message = messages
}
return e
}
// Listener can be used to pass a custom listener.

View File

@ -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