diff --git a/senderror_test.go b/senderror_test.go index 5797520..7e538c6 100644 --- a/senderror_test.go +++ b/senderror_test.go @@ -6,6 +6,7 @@ package mail import ( "errors" + "fmt" "strings" "testing" ) @@ -290,6 +291,45 @@ 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) + 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")) + 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")) + 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"))) + 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")) + 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")) + if code != 0 { + t.Errorf("expected error code: %d, got: %d", 0, code) + } + }) +} + // returnSendError is a helper method to retunr a SendError with a specific reason func returnSendError(r SendErrReason, t bool) error { message := NewMsg()