go-playground / validator

:100:Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving
MIT License
16.14k stars 1.29k forks source link

Required behaviour changed for time.Time #1162

Closed daveoxley closed 10 months ago

daveoxley commented 10 months ago

Package version eg. v9, v10:

v10.15.2

Issue, Question or Enhancement:

A zero time.Time passes the required validation in v10.15.2 but not in v10.15.1. Adding in WithRequiredStructEnabled to the New() func does enable the test to pass but I'm not sure if I should make this code change in our codebase; should the default behaviour have changed between these minor releases?

I've provided a sample test that passes in v10.15.1 but fails in v10.15.2.

Code sample, to showcase or reproduce:

func TestTimeRequired(t *testing.T) {
    validate := New()
    validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
        name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]

        if name == "-" {
            return ""
        }

        return name
    })

    type TestTime struct {
        Time time.Time `validate:"required"`
    }

    var testTime TestTime

    err := validate.Struct(&testTime)
    NotEqual(t, err, nil)
    AssertError(t, err.(ValidationErrors), "TestTime.Time", "TestTime.Time", "Time", "Time", "required")
}
MukeshGKastala commented 10 months ago

+1

deankarn commented 10 months ago

Thanks for the report, I’ll be looking into it as soon as I can find some time.

deankarn commented 10 months ago

@daveoxley this should all be resolved in Release https://github.com/go-playground/validator/releases/tag/v10.15.4