Skip to content

Commit

Permalink
add errorutils tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jxsl13 committed Aug 20, 2023
1 parent c4fcda1 commit 4381bee
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 5 deletions.
15 changes: 10 additions & 5 deletions internal/errorutils/errorutils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,17 @@ import (

func TestUnwrapErrors(t *testing.T) {
err := Join(errors.New("foo"), errors.New("bar"))
require.NotEmpty(t, err.Error())

errs := Unwrap(err)
errs := ShallowUnwrap(err)
require.Len(t, errs, 2)
}

func TestUnwrapError(t *testing.T) {
err := fmt.Errorf("foo: %w", errors.New("bar"))

errs := Unwrap(err)
require.Len(t, errs, 2)
errs := ShallowUnwrap(err)
require.Len(t, errs, 1)
}

func TestUnwrapHierarchyError(t *testing.T) {
Expand All @@ -31,11 +32,15 @@ func TestUnwrapHierarchyError(t *testing.T) {

err := Join(Join(nil, err2), Join(nil, err4, nil))

errs := Unwrap(err)
require.Len(t, errs, 4)
errs := ShallowUnwrap(err)
require.Len(t, errs, 2)
}

func TestJoinNils(t *testing.T) {
err := Join(nil, nil)
require.Nil(t, err)
}

func TestDeepMultiErrorUnwrapNil(t *testing.T) {
require.Nil(t, deepUnwrapMultiError(nil))
}
93 changes: 93 additions & 0 deletions internal/errorutils/filter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package errorutils

import (
"errors"
"fmt"
"testing"

"github.com/stretchr/testify/require"
)

type customErr struct {
FieldValue string
}

func (e *customErr) Error() string {
return e.FieldValue
}

func shallowFilter(err error) bool {
_, ok := err.(*customErr)
return ok
}

func deepFilter(err error) bool {
var cerr *customErr
return errors.As(err, &cerr)
}

func removeAllFilter(err error) bool {
return false
}

func TestFilter(t *testing.T) {

errs := []error{
&customErr{FieldValue: "foo"},
fmt.Errorf("foo: %w", &customErr{FieldValue: "foo"}),
errors.New("bar"),
nil,
}

filtered := Filter(errs, shallowFilter)

require.Len(t, filtered, 1)

for _, err := range filtered {
require.NotNil(t, err)
cerr, ok := err.(*customErr)
require.True(t, ok, "cannot type assert to customErr")

require.NotEmpty(t, cerr.FieldValue)
}

filtered = Filter(errs, deepFilter)

require.Len(t, filtered, 2)
}

func TestFilteredNormal(t *testing.T) {
errs := []error{
&customErr{FieldValue: "foo"},
fmt.Errorf("foo: %w", &customErr{FieldValue: "foo"}),
errors.New("bar"),
nil,
}
err := Join(errs...)

filtered := Filtered(err, shallowFilter)

require.Len(t, ShallowUnwrap(filtered), 1)

filtered = Filtered(err, deepFilter)
require.Len(t, ShallowUnwrap(filtered), 2)
}

func TestFilteredNil(t *testing.T) {

filtered := Filtered(nil, shallowFilter)
require.Nil(t, filtered)
}

func TestFilteredEmpty(t *testing.T) {
errs := []error{
&customErr{FieldValue: "foo"},
fmt.Errorf("foo: %w", &customErr{FieldValue: "foo"}),
errors.New("bar"),
nil,
}
err := Join(errs...)

filtered := Filtered(err, removeAllFilter)
require.Len(t, ShallowUnwrap(filtered), 0)
}

0 comments on commit 4381bee

Please sign in to comment.