From e8fb977afeb81436bff654c5f992f7adc0fc1f13 Mon Sep 17 00:00:00 2001 From: Winni Neessen Date: Wed, 13 Nov 2024 21:48:24 +0100 Subject: [PATCH] Add tests for getErrorCode function Introduce a suite of unit tests for the getErrorCode function to validate its behavior with various error types, including go-mail errors, permanent and temporary errors, wrapper errors, non-4xx/5xx errors, and non-3-digit codes. --- senderror_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) 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()