106 lines
3 KiB
Go
106 lines
3 KiB
Go
package errors
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestAppError_Error teste le formatage des messages d'erreur
|
|
func TestAppError_Error(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
err *AppError
|
|
expected string
|
|
}{
|
|
{
|
|
name: "error without wrapped error",
|
|
err: New(ErrCodeValidation, "Invalid input"),
|
|
expected: "[2000] Invalid input",
|
|
},
|
|
{
|
|
name: "error with wrapped error",
|
|
err: Wrap(ErrCodeDatabase, "Database query failed", assert.AnError),
|
|
expected: "[9001] Database query failed: assert.AnError general error for testing",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := tt.err.Error()
|
|
assert.Contains(t, result, tt.expected)
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestAppError_Unwrap teste la fonction Unwrap
|
|
func TestAppError_Unwrap(t *testing.T) {
|
|
wrappedErr := assert.AnError
|
|
err := Wrap(ErrCodeDatabase, "Database error", wrappedErr)
|
|
|
|
assert.Equal(t, wrappedErr, err.Unwrap())
|
|
assert.Nil(t, New(ErrCodeValidation, "Test").Unwrap())
|
|
}
|
|
|
|
// TestNew teste la création d'une nouvelle AppError
|
|
func TestNew(t *testing.T) {
|
|
err := New(ErrCodeValidation, "Test message")
|
|
|
|
assert.Equal(t, ErrCodeValidation, err.Code)
|
|
assert.Equal(t, "Test message", err.Message)
|
|
assert.Nil(t, err.Err)
|
|
assert.Empty(t, err.Details)
|
|
}
|
|
|
|
// TestWrap teste l'enveloppement d'une erreur
|
|
func TestWrap(t *testing.T) {
|
|
wrappedErr := assert.AnError
|
|
err := Wrap(ErrCodeInternal, "Internal error", wrappedErr)
|
|
|
|
assert.Equal(t, ErrCodeInternal, err.Code)
|
|
assert.Equal(t, "Internal error", err.Message)
|
|
assert.Equal(t, wrappedErr, err.Err)
|
|
}
|
|
|
|
// TestNewValidationError teste la création d'une erreur de validation
|
|
func TestNewValidationError(t *testing.T) {
|
|
details := []ErrorDetail{
|
|
{Field: "email", Message: "Invalid format"},
|
|
{Field: "password", Message: "Too short"},
|
|
}
|
|
|
|
err := NewValidationError("Validation failed", details...)
|
|
|
|
assert.Equal(t, ErrCodeValidation, err.Code)
|
|
assert.Equal(t, "Validation failed", err.Message)
|
|
assert.Len(t, err.Details, 2)
|
|
assert.Equal(t, "email", err.Details[0].Field)
|
|
assert.Equal(t, "Invalid format", err.Details[0].Message)
|
|
assert.Equal(t, "password", err.Details[1].Field)
|
|
assert.Equal(t, "Too short", err.Details[1].Message)
|
|
}
|
|
|
|
// TestNewValidationError_NoDetails teste la création sans détails
|
|
func TestNewValidationError_NoDetails(t *testing.T) {
|
|
err := NewValidationError("Validation failed")
|
|
|
|
assert.Equal(t, ErrCodeValidation, err.Code)
|
|
assert.Equal(t, "Validation failed", err.Message)
|
|
assert.Empty(t, err.Details)
|
|
}
|
|
|
|
// TestNewNotFoundError teste la création d'une erreur "not found"
|
|
func TestNewNotFoundError(t *testing.T) {
|
|
err := NewNotFoundError("User")
|
|
|
|
assert.Equal(t, ErrCodeNotFound, err.Code)
|
|
assert.Equal(t, "User not found", err.Message)
|
|
}
|
|
|
|
// TestNewUnauthorizedError teste la création d'une erreur d'autorisation
|
|
func TestNewUnauthorizedError(t *testing.T) {
|
|
err := NewUnauthorizedError("Invalid token")
|
|
|
|
assert.Equal(t, ErrCodeUnauthorized, err.Code)
|
|
assert.Equal(t, "Invalid token", err.Message)
|
|
}
|