mirror of
https://github.com/foomo/fender.git
synced 2025-10-16 12:25:39 +00:00
67 lines
2.0 KiB
Go
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))
|
|
}
|
|
})
|
|
}
|