func TestBirthDateValidator(t *testing.T) { var now = time.Now() var yearsAgo = func(yrs int) time.Time { n := time.Now() nowAFter := n.AddDate(18, 1, 1) dur := nowAFter.Sub(n) return n.Add(-dur) } Form := gforms.DefineForm(gforms.NewFields( gforms.NewDateTimeField( "date", time.RFC822, gforms.Validators{ BirthDateValidator{Limit: 18, Message: msgAge}, }, ), )) vars := url.Values{"date": {now.Format(time.RFC822)}} req1, err := http.NewRequest("POST", "/", strings.NewReader(vars.Encode())) if err != nil { t.Error(err) } req1.Header.Add("Content-Type", "application/x-www-form-urlencoded") form := Form(req1) if form.IsValid() { t.Error("Expected some errors") } vars = url.Values{"date": {yearsAgo(18).Format(time.RFC822)}} req2, err := http.NewRequest("POST", "/", strings.NewReader(vars.Encode())) if err != nil { t.Error(err) } req2.Header.Add("Content-Type", "application/x-www-form-urlencoded") form = Form(req2) if !form.IsValid() { t.Error(form.Errors()) } }
// RegisterForm implements gforms.ModelForm interface for Registration form. func (f *Form) RegisterForm() gforms.ModelForm { var birtdateAttrs = map[string]string{ "id": "birthdate", "class": "input-large", } var inputAttrs = map[string]string{ "class": "input-large", } return gforms.DefineModelForm(Register{}, gforms.NewFields( gforms.NewTextField( "first_name", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), }, gforms.TextInputWidget(inputAttrs), ), gforms.NewTextField( "last_name", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), }, gforms.TextInputWidget(inputAttrs), ), gforms.NewTextField( "middle_name", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), }, gforms.TextInputWidget(inputAttrs), ), gforms.NewTextField( "email", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), gforms.EmailValidator(f.tr.T(msgEmail)), }, gforms.BaseTextWidget("email", inputAttrs), ), gforms.NewTextField( "password", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), gforms.MinLengthValidator(6, f.tr.T(msgMinLength, 6)), }, gforms.PasswordInputWidget(inputAttrs), ), gforms.NewTextField( "confirm_password", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), gforms.MinLengthValidator(6, f.tr.T(msgMinLength, 6)), EqualValidator{To: "password", Message: f.tr.T(msgEqual)}, }, gforms.PasswordInputWidget(inputAttrs), ), gforms.NewTextField( "gender", gforms.Validators{ gforms.Required(f.tr.T(msgRequired)), }, gforms.SelectWidget( inputAttrs, func() gforms.SelectOptions { return gforms.StringSelectOptions([][]string{ {"Select...", "", "true", "false"}, {"Male", "0", "false", "false"}, {"Female", "1", "false", "false"}, {"Zombie", "2", "false", "true"}, }) }, ), ), gforms.NewDateTimeField( "birth_date", settings.App.BirthDateFormat, gforms.Validators{ BirthDateValidator{Limit: settings.App.MinimumAge, Message: f.tr.T(msgAge, settings.App.MinimumAge)}, gforms.Required(f.tr.T(msgRequired)), }, gforms.BaseTextWidget("text", birtdateAttrs), ), )) }