• Nick Stenning's avatar
    Support reporting top-level form validation errors · e13040b9
    Nick Stenning authored
    When we call `form.validate()` and the validation fails, the raised
    exception is a `deform.ValidationFailure`. This object has an `error`
    attribute which represents the underlying validation error object for
    the entire form.
    
    Previously, if the validation failure were a result of top-level
    validation errors (such as the fact that an unactivated user is trying
    to log in), this error would be lost, because we only reported errors
    for the forms fields, or "children".
    
    This commit changes `h.accounts.views.validate_form` so that it converts
    the entire `colander.Invalid` object into a dictionary using its
    `asdict()` instance method. By doing this, we get two immediate
    benefits:
    
    - top-level validation errors are reported in the '' (empty string)
      field
    - we avoid the need to aggregate form field errors by hand in ajax_form
    
    In addition, we need to deal with this case on the frontend, so this
    commit also changes the formRespond directive so that if no overall
    "reason" is provided for failure, then an empty-string member of the
    "errors" object can set the overall validation status (and error
    message) for the form.
    e13040b9
form-respond.coffee 834 Bytes