diff --git a/pkg/utils/errorWrapper.go b/pkg/utils/errorWrapper.go new file mode 100644 index 0000000..08fab1b --- /dev/null +++ b/pkg/utils/errorWrapper.go @@ -0,0 +1,12 @@ +package utils + +import ( + "fmt" + + "github.com/rs/zerolog" +) + +func WrapError(mailError error, reasiningError error, logger zerolog.Logger) error { + logger.Error().Err(reasiningError).Msg(mailError.Error()) + return fmt.Errorf("%w: %s", mailError, reasiningError) +} diff --git a/pkg/utils/errorWrapper_test.go b/pkg/utils/errorWrapper_test.go new file mode 100644 index 0000000..46525bb --- /dev/null +++ b/pkg/utils/errorWrapper_test.go @@ -0,0 +1,40 @@ +package utils + +import ( + "bufio" + "errors" + "os" + "testing" + + "github.com/rs/zerolog" + "github.com/stretchr/testify/assert" +) + +func TestErrorWrapper(t *testing.T) { + scanner, _, writer := mockLogger(t) + log := zerolog.New(writer) + + TestError1 := errors.New("first error") + TestError2 := errors.New("secound error") + + resulterror := WrapError(TestError1, TestError2, log) + + assert.Equal(t, "first error: secound error", resulterror.Error()) + + scanner.Scan() + got := scanner.Text() + assert.Equal(t, "{\"level\":\"error\",\"error\":\"secound error\",\"message\":\"first error\"}", got) + + assert.ErrorIs(t, resulterror, TestError1) + assert.NotErrorIs(t, resulterror, TestError2) +} + +// https://stackoverflow.com/questions/44119951/how-to-check-a-log-output-in-go-test +func mockLogger(t *testing.T) (*bufio.Scanner, *os.File, *os.File) { + reader, writer, err := os.Pipe() + if err != nil { + assert.Fail(t, "couldn't get os Pipe: %v", err) + } + + return bufio.NewScanner(reader), reader, writer +}