fender/first_test.go
2022-02-04 09:03:30 +01:00

67 lines
2.0 KiB
Go

package fender_test
import (
"testing"
"github.com/foomo/fender"
"github.com/foomo/fender/fend"
"github.com/foomo/fender/rule"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
func TestFirst(t *testing.T) {
t.Run("success", func(t *testing.T) {
if fendErr, err := fender.First(
fender.Field("foo", fend.String("foo", rule.RequiredString)),
); assert.NoError(t, err) {
assert.Nil(t, fendErr)
}
})
t.Run("error string", func(t *testing.T) {
if fendErr, err := fender.First(
fender.Field("foo", fend.String("", rule.MinString(10))),
); assert.NoError(t, err) && assert.NotNil(t, fendErr) {
assert.True(t, errors.Is(fendErr, fender.Err))
first := fendErr.First()
assert.True(t, errors.Is(first, rule.Err))
assert.True(t, errors.Is(errors.Cause(first), rule.ErrMin))
assert.EqualError(t, fendErr, "foo:min=10")
}
})
t.Run("error var", func(t *testing.T) {
if fendErr, err := fender.First(fender.Field("foo", fend.Var("", "min=10"))); assert.NoError(t, err) && assert.NotNil(t, fendErr) {
assert.True(t, fender.IsError(fendErr))
first := fendErr.First()
assert.True(t, errors.Is(first, rule.Err))
assert.True(t, errors.Is(errors.Cause(first), rule.ErrVar))
assert.EqualError(t, fendErr, "foo:min=10")
}
})
t.Run("return std error", func(t *testing.T) {
e := errors.New("std error")
if fendErr, err := fender.First(fender.Field("foo", fend.Custom(func() (*rule.Error, error) {
return nil, e
}))); assert.Error(t, err) && assert.Nil(t, fendErr) {
assert.False(t, fender.IsError(fendErr))
assert.True(t, errors.Is(err, e))
}
})
t.Run("return std errors", func(t *testing.T) {
e := errors.New("std error")
if fendErr, err := fender.First(
fender.Field("foo", fend.Custom(func() (*rule.Error, error) {
return nil, e
})),
fender.Field("foo", fend.String("", rule.RequiredString)),
); assert.Error(t, err) && assert.Nil(t, fendErr) {
assert.False(t, fender.IsError(fendErr))
assert.True(t, errors.Is(err, e))
}
})
}