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()