83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
|
|
package errors
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestAppError_WithContext(t *testing.T) {
|
||
|
|
err := New(ErrCodeValidation, "Invalid input")
|
||
|
|
err.Context = map[string]interface{}{
|
||
|
|
"request_id": "abc123",
|
||
|
|
"user_id": 42,
|
||
|
|
}
|
||
|
|
|
||
|
|
assert.NotNil(t, err.Context)
|
||
|
|
assert.Equal(t, "abc123", err.Context["request_id"])
|
||
|
|
assert.Equal(t, 42, err.Context["user_id"])
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAppError_ContextNil(t *testing.T) {
|
||
|
|
err := New(ErrCodeValidation, "Invalid input")
|
||
|
|
assert.Nil(t, err.Context)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAppError_ContextEmpty(t *testing.T) {
|
||
|
|
err := New(ErrCodeValidation, "Invalid input")
|
||
|
|
err.Context = make(map[string]interface{})
|
||
|
|
assert.NotNil(t, err.Context)
|
||
|
|
assert.Equal(t, 0, len(err.Context))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAppError_ContextWithMultipleFields(t *testing.T) {
|
||
|
|
err := New(ErrCodeInternal, "Internal error")
|
||
|
|
err.Context = map[string]interface{}{
|
||
|
|
"request_id": "req-123",
|
||
|
|
"user_id": int64(100),
|
||
|
|
"ip_address": "192.168.1.1",
|
||
|
|
"path": "/api/test",
|
||
|
|
}
|
||
|
|
|
||
|
|
assert.Equal(t, "req-123", err.Context["request_id"])
|
||
|
|
assert.Equal(t, int64(100), err.Context["user_id"])
|
||
|
|
assert.Equal(t, "192.168.1.1", err.Context["ip_address"])
|
||
|
|
assert.Equal(t, "/api/test", err.Context["path"])
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestNewValidationError_Context(t *testing.T) {
|
||
|
|
err := NewValidationError("Validation failed",
|
||
|
|
ErrorDetail{Field: "email", Message: "Invalid format"},
|
||
|
|
)
|
||
|
|
|
||
|
|
// Context devrait être nil par défaut
|
||
|
|
assert.Nil(t, err.Context)
|
||
|
|
|
||
|
|
// Mais on peut l'ajouter après
|
||
|
|
err.Context = map[string]interface{}{
|
||
|
|
"request_id": "xyz789",
|
||
|
|
}
|
||
|
|
assert.Equal(t, "xyz789", err.Context["request_id"])
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestNewNotFoundError_Context(t *testing.T) {
|
||
|
|
err := NewNotFoundError("User")
|
||
|
|
|
||
|
|
assert.Nil(t, err.Context)
|
||
|
|
err.Context = map[string]interface{}{
|
||
|
|
"resource_id": 123,
|
||
|
|
}
|
||
|
|
assert.Equal(t, 123, err.Context["resource_id"])
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestWrap_Context(t *testing.T) {
|
||
|
|
originalErr := New(ErrCodeInternal, "Original error")
|
||
|
|
wrappedErr := Wrap(ErrCodeValidation, "Wrapped error", originalErr)
|
||
|
|
|
||
|
|
assert.Nil(t, wrappedErr.Context)
|
||
|
|
wrappedErr.Context = map[string]interface{}{
|
||
|
|
"wrapped": true,
|
||
|
|
}
|
||
|
|
assert.Equal(t, true, wrappedErr.Context["wrapped"])
|
||
|
|
}
|