79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
package errors
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type validate interface {
|
|
ValidateBasic() error
|
|
}
|
|
|
|
type holder struct {
|
|
validate
|
|
}
|
|
|
|
func (h holder) Unwrap() validate {
|
|
return h.validate
|
|
}
|
|
|
|
type demoTx struct {
|
|
Age int
|
|
}
|
|
|
|
func (t demoTx) Wrap() holder {
|
|
return holder{t}
|
|
}
|
|
|
|
func (t demoTx) ValidateBasic() error {
|
|
return nil
|
|
}
|
|
|
|
func TestErrorMatches(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
cases := []struct {
|
|
pattern, err error
|
|
match bool
|
|
}{
|
|
{errDecoding, ErrDecoding(), true},
|
|
{errUnauthorized, ErrUnauthorized(), true},
|
|
{errMissingSignature, ErrUnauthorized(), false},
|
|
{errMissingSignature, ErrMissingSignature(), true},
|
|
{errUnknownTxType, ErrUnknownTxType(holder{}), true},
|
|
{errUnknownTxType, ErrUnknownTxType("some text here..."), true},
|
|
{errUnknownTxType, ErrUnknownTxType(demoTx{5}.Wrap()), true},
|
|
}
|
|
|
|
for i, tc := range cases {
|
|
same := IsSameError(tc.pattern, tc.err)
|
|
assert.Equal(tc.match, same, "%d: %#v / %#v", i, tc.pattern, tc.err)
|
|
}
|
|
}
|
|
|
|
func TestChecks(t *testing.T) {
|
|
// TODO: make sure the Is and Err methods match
|
|
assert := assert.New(t)
|
|
|
|
cases := []struct {
|
|
err error
|
|
check func(error) bool
|
|
match bool
|
|
}{
|
|
{ErrDecoding(), IsDecodingErr, true},
|
|
{ErrUnauthorized(), IsDecodingErr, false},
|
|
{ErrUnauthorized(), IsUnauthorizedErr, true},
|
|
// make sure lots of things match InternalErr, but not everything
|
|
{ErrInternal("bad db connection"), IsInternalErr, true},
|
|
{Wrap(errors.New("wrapped")), IsInternalErr, true},
|
|
{ErrUnauthorized(), IsInternalErr, false},
|
|
}
|
|
|
|
for i, tc := range cases {
|
|
match := tc.check(tc.err)
|
|
assert.Equal(tc.match, match, "%d", i)
|
|
}
|
|
}
|