diff --git a/pkg/schema/validate/string.go b/pkg/schema/validate/string.go index f05ca540034e3cfab7e57c1aa324bcb343b97431..33fa453d0c707b893803f6e43484e50f232e8506 100644 --- a/pkg/schema/validate/string.go +++ b/pkg/schema/validate/string.go @@ -18,6 +18,9 @@ func MaxLength(max int) Validator { } func (t maxLength) Validate(_ context.Context, field *field.Field, value interface{}) error { + if value == nil { + return nil + } if s, ok := value.(string); ok { n := utf8.RuneCountInString(s) if t > 0 && n > int(t) { @@ -36,6 +39,9 @@ func MinLength(max int) Validator { } func (t minLength) Validate(_ context.Context, field *field.Field, value interface{}) error { + if value == nil { + return nil + } if s, ok := value.(string); ok { n := utf8.RuneCountInString(s) if n < int(t) { diff --git a/pkg/schema/validate/string_test.go b/pkg/schema/validate/string_test.go index b67e8c8d4f5056c61d5483a536701777d716bead..156b5f63e9643854402bb4562f2761db09dd8759 100644 --- a/pkg/schema/validate/string_test.go +++ b/pkg/schema/validate/string_test.go @@ -92,9 +92,12 @@ func TestString(t *testing.T) { wantErr bool }{ {"Length Max", field.String().AddOptions(MaxLength(5)), "1234567", true}, + {"Length Max with <nil>", field.String().AddOptions(MaxLength(5)), nil, false}, {"Length Min", field.String().AddOptions(MinLength(10)), "1234", true}, + {"Length Min with <nil>", field.String().AddOptions(MinLength(10)), nil, false}, {"Length MinMax", field.String().AddOptions(MaxLength(6), MinLength(2)), "1234567", true}, {"Length MinMax", field.String().AddOptions(MaxLength(10), MinLength(7)), "123456", true}, + {"Length MinMax with <nil>", field.String().AddOptions(MaxLength(10), MinLength(7)), nil, false}, {"Enum miss", field.String().AddOptions(Enum(EnumOpt{Name: "N 1", Value: "n1"}, EnumOpt{Name: "N 2", Value: "n2"})), "n3", true}, {"Enum match", field.String().AddOptions(Enum(EnumOpt{Name: "N 1", Value: "n1"}, EnumOpt{Name: "N 2", Value: "n2"})), "n2", false}, {"Invalid Schema Options", field.String().AddOptions(Schema()), invalidOptionsSchema, true},