From f367db0278db541daa802d4250dbde024def1098 Mon Sep 17 00:00:00 2001 From: Winni Neessen Date: Wed, 13 Nov 2024 22:53:18 +0100 Subject: [PATCH] Refactor error code functions and add enhanced status code tests Renamed `getErrorCode` function to `errorCode` for consistency. Added new tests for the `enhancedStatusCode` function to validate its behavior with various error scenarios. --- senderror_test.go | 65 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/senderror_test.go b/senderror_test.go index 7e538c6..63d4c73 100644 --- a/senderror_test.go +++ b/senderror_test.go @@ -255,7 +255,7 @@ func TestSendError_ErrorCode(t *testing.T) { errlist: []error{ErrNoRcptAddresses}, rcpt: []string{"", ""}, Reason: ErrAmbiguous, - errcode: getErrorCode(ErrNoRcptAddresses), + errcode: errorCode(ErrNoRcptAddresses), } if err.ErrorCode() != 0 { t.Errorf("expected error code: %d, got: %d", 0, err.ErrorCode()) @@ -266,7 +266,7 @@ func TestSendError_ErrorCode(t *testing.T) { errlist: []error{ErrNoRcptAddresses}, rcpt: []string{"", ""}, Reason: ErrAmbiguous, - errcode: getErrorCode(errors.New("535 5.7.8 Error: authentication failed")), + errcode: errorCode(errors.New("535 5.7.8 Error: authentication failed")), } if err.ErrorCode() != 535 { t.Errorf("expected error code: %d, got: %d", 535, err.ErrorCode()) @@ -277,7 +277,7 @@ func TestSendError_ErrorCode(t *testing.T) { errlist: []error{ErrNoRcptAddresses}, rcpt: []string{"", ""}, Reason: ErrAmbiguous, - errcode: getErrorCode(errors.New("441 4.1.0 Server currently unavailable")), + errcode: errorCode(errors.New("441 4.1.0 Server currently unavailable")), } if err.ErrorCode() != 441 { t.Errorf("expected error code: %d, got: %d", 441, err.ErrorCode()) @@ -291,45 +291,78 @@ func TestSendError_ErrorCode(t *testing.T) { }) } -func TestSendError_getErrorCode(t *testing.T) { - t.Run("getErrorCode with a go-mail error should return 0", func(t *testing.T) { - code := getErrorCode(ErrNoRcptAddresses) +func TestSendError_errorCode(t *testing.T) { + t.Run("errorCode with a go-mail error should return 0", func(t *testing.T) { + code := errorCode(ErrNoRcptAddresses) if code != 0 { t.Errorf("expected error code: %d, got: %d", 0, code) } }) - t.Run("getErrorCode with permanent error", func(t *testing.T) { - code := getErrorCode(errors.New("535 5.7.8 Error: authentication failed")) + t.Run("errorCode with permanent error", func(t *testing.T) { + code := errorCode(errors.New("535 5.7.8 Error: authentication failed")) if code != 535 { t.Errorf("expected error code: %d, got: %d", 535, code) } }) - t.Run("getErrorCode with temporary error", func(t *testing.T) { - code := getErrorCode(errors.New("443 4.1.0 Server currently unavailable")) + t.Run("errorCode with temporary error", func(t *testing.T) { + code := errorCode(errors.New("443 4.1.0 Server currently unavailable")) if code != 443 { t.Errorf("expected error code: %d, got: %d", 443, code) } }) - t.Run("getErrorCode with wrapper error", func(t *testing.T) { - code := getErrorCode(fmt.Errorf("an error occured: %w", errors.New("443 4.1.0 Server currently unavailable"))) + t.Run("errorCode with wrapper error", func(t *testing.T) { + code := errorCode(fmt.Errorf("an error occured: %w", errors.New("443 4.1.0 Server currently unavailable"))) if code != 443 { t.Errorf("expected error code: %d, got: %d", 443, code) } }) - t.Run("getErrorCode with non-4xx and non-5xx error", func(t *testing.T) { - code := getErrorCode(errors.New("220 2.1.0 This is not an error")) + t.Run("errorCode with non-4xx and non-5xx error", func(t *testing.T) { + code := errorCode(errors.New("220 2.1.0 This is not an error")) if code != 0 { t.Errorf("expected error code: %d, got: %d", 0, code) } }) - t.Run("getErrorCode with non 3-digit code", func(t *testing.T) { - code := getErrorCode(errors.New("4xx 4.1.0 The status code is invalid")) + t.Run("errorCode with non 3-digit code", func(t *testing.T) { + code := errorCode(errors.New("4xx 4.1.0 The status code is invalid")) if code != 0 { t.Errorf("expected error code: %d, got: %d", 0, code) } }) } +func TestSendError_enhancedStatusCode(t *testing.T) { + t.Run("enhancedStatusCode with nil error should return empty string", func(t *testing.T) { + code := enhancedStatusCode(nil, true) + if code != "" { + t.Errorf("expected empty enhanced status code, got: %s", code) + } + }) + t.Run("enhancedStatusCode with error but no support should return empty string", func(t *testing.T) { + code := enhancedStatusCode(errors.New("553 5.5.3 something went wrong"), false) + if code != "" { + t.Errorf("expected empty enhanced status code, got: %s", code) + } + }) + t.Run("enhancedStatusCode with error and support", func(t *testing.T) { + code := enhancedStatusCode(errors.New("553 5.5.3 something went wrong"), true) + if code != "5.5.3" { + t.Errorf("expected enhanced status code: %s, got: %s", "5.5.3", code) + } + }) + t.Run("enhancedStatusCode with wrapped error and support", func(t *testing.T) { + code := enhancedStatusCode(fmt.Errorf("this error is wrapped: %w", errors.New("553 5.5.3 something went wrong")), true) + if code != "5.5.3" { + t.Errorf("expected enhanced status code: %s, got: %s", "5.5.3", code) + } + }) + t.Run("enhancedStatusCode with 3xx error", func(t *testing.T) { + code := enhancedStatusCode(errors.New("300 3.0.0 i don't know what i'm doing"), true) + if code != "" { + t.Errorf("expected enhanced status code to be empty, got: %s", code) + } + }) +} + // returnSendError is a helper method to retunr a SendError with a specific reason func returnSendError(r SendErrReason, t bool) error { message := NewMsg()