Files
fender/fender_test.go
Kevin Franklin Kim 4495035afa feat: go 1.26.0
2026-02-26 22:51:04 +01:00

147 lines
3.1 KiB
Go

package fender_test
import (
"context"
"testing"
"github.com/foomo/fender"
"github.com/foomo/fender/fend"
"github.com/foomo/fender/rule"
"github.com/stretchr/testify/assert"
)
type Gender string
const (
GenderMale Gender = "male"
GenderFemmale Gender = "female"
)
func (g Gender) String() string {
return string(g)
}
func (g Gender) Valid() bool {
return g == GenderMale || g == GenderFemmale
}
var (
email = fend.NewRules(
rule.StringMin(6),
rule.StringMax(30),
rule.Email,
)
title = fend.NewRules(
rule.StringMin(2),
rule.NotEqual("dr."),
)
gender = fend.NewRules(
rule.Valid[Gender],
)
dynamic = fend.DynamicVar(
func(ctx context.Context) error {
return fend.NewRuleError("dynamic", "foo")
},
)
firstName = fend.NewRules(
rule.StringMin(6),
rule.StringMax(30),
rule.Alpha,
)
streetNumber = fend.NewRules(
rule.NumberMin(1),
rule.NumberMax(10),
)
)
func TestAll(t *testing.T) {
t.Parallel()
tests := []struct {
name string
fends fend.Fends
wantAllErr string
wantFirstErr string
wantAllFirstErr string
}{
{
name: "success values",
fends: fend.Fends{
title.Var("dr"),
gender.Var(GenderMale),
firstName.Var("foobar"),
streetNumber.Var(5),
email.Var("foo@bar.com"),
},
},
{
name: "failure values",
fends: fend.Fends{
title.Var("dr."),
gender.Var("divers"),
firstName.Var("foo"),
streetNumber.Var(15),
email.Var("foo"),
dynamic,
},
wantAllErr: "equal=dr.;valid;min=6;max=10;min=6:email=parse;dynamic:foo",
wantFirstErr: "equal=dr.",
wantAllFirstErr: "equal=dr.",
},
{
name: "success fields",
fends: fend.Fends{
title.Field("title", "dr"),
gender.Field("gender", GenderMale),
firstName.Field("firstName", "foobar"),
streetNumber.Field("firstName", 5),
email.Field("email", "foo@bar.com"),
},
},
{
name: "failure fields",
fends: fend.Fends{
title.Field("title", "dr."),
gender.Field("gender", "divers"),
firstName.Field("firstName", "foo"),
streetNumber.Field("firstName", 15),
email.Field("email", "foo"),
dynamic,
},
wantAllErr: "title:equal=dr.;gender:valid;firstName:min=6;firstName:max=10;email:min=6:email=parse;dynamic:foo",
wantFirstErr: "title:equal=dr.",
wantAllFirstErr: "title:equal=dr.",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if err := fender.All(context.TODO(), tt.fends...); tt.wantAllErr == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, err, tt.wantAllErr)
}
if err := fender.All(context.TODO(), tt.fends...); tt.wantAllErr == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, err, tt.wantAllErr)
}
if err := fender.First(context.TODO(), tt.fends...); tt.wantFirstErr == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, err, tt.wantFirstErr)
}
if err := fender.AllFirst(context.TODO(), tt.fends...); tt.wantAllFirstErr == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, err, tt.wantAllFirstErr)
}
})
}
}