From 282b7242ecd5e52b50d8fc8b95243b4540256bb1 Mon Sep 17 00:00:00 2001 From: Virgil Date: Wed, 1 Apr 2026 04:55:55 +0000 Subject: [PATCH] fix(log): stop inheriting codes in wrapcode helpers Co-Authored-By: Virgil --- errors.go | 6 ------ errors_test.go | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/errors.go b/errors.go index 86e434e..d2fbf60 100644 --- a/errors.go +++ b/errors.go @@ -137,9 +137,6 @@ func WrapWithRecovery(err error, op, msg string, retryable bool, retryAfter *tim // // return log.WrapCode(err, "VALIDATION_ERROR", "user.Validate", "invalid email") func WrapCode(err error, code, op, msg string) error { - if code == "" { - code = ErrCode(err) - } if err == nil && code == "" { return nil } @@ -152,9 +149,6 @@ func WrapCode(err error, code, op, msg string) error { // // return log.WrapCodeWithRecovery(err, "TEMPORARY_UNAVAILABLE", "api.Call", "temporary failure", true, &retryAfter, "retry with backoff") func WrapCodeWithRecovery(err error, code, op, msg string, retryable bool, retryAfter *time.Duration, nextAction string) error { - if code == "" { - code = ErrCode(err) - } if err == nil && code == "" { return nil } diff --git a/errors_test.go b/errors_test.go index 3d0fa12..c6e2758 100644 --- a/errors_test.go +++ b/errors_test.go @@ -165,6 +165,16 @@ func TestWrapCode_Good(t *testing.T) { assert.Contains(t, err.Error(), "[INVALID_INPUT]") } +func TestWrapCode_Good_EmptyCodeDoesNotInherit(t *testing.T) { + inner := WrapCode(errors.New("base"), "INNER_CODE", "inner.Op", "inner failed") + + outer := WrapCode(inner, "", "outer.Op", "outer failed") + + var logErr *Err + assert.True(t, As(outer, &logErr)) + assert.Equal(t, "", logErr.Code) +} + func TestWrapCodeWithRecovery_Good(t *testing.T) { retryAfter := time.Minute err := WrapCodeWithRecovery(errors.New("validation failed"), "INVALID_INPUT", "api.Validate", "bad request", true, &retryAfter, "retry with backoff") @@ -179,6 +189,17 @@ func TestWrapCodeWithRecovery_Good(t *testing.T) { assert.Equal(t, "INVALID_INPUT", logErr.Code) } +func TestWrapCodeWithRecovery_Good_EmptyCodeDoesNotInherit(t *testing.T) { + retryAfter := time.Minute + inner := WrapCodeWithRecovery(errors.New("validation failed"), "INNER_CODE", "inner.Op", "inner failed", true, &retryAfter, "retry later") + + outer := WrapCodeWithRecovery(inner, "", "outer.Op", "outer failed", true, &retryAfter, "retry later") + + var logErr *Err + assert.True(t, As(outer, &logErr)) + assert.Equal(t, "", logErr.Code) +} + func TestWrapCode_Good_NilError(t *testing.T) { // WrapCode with nil error but with code still creates an error err := WrapCode(nil, "CODE", "op", "msg") -- 2.45.3