diff options
| -rw-r--r-- | users/app/assets/javascripts/users.js | 51 | ||||
| -rw-r--r-- | users/test/integration/browser/account_test.rb | 11 | 
2 files changed, 46 insertions, 16 deletions
diff --git a/users/app/assets/javascripts/users.js b/users/app/assets/javascripts/users.js index aaeba6e..8486756 100644 --- a/users/app/assets/javascripts/users.js +++ b/users/app/assets/javascripts/users.js @@ -46,6 +46,13 @@      $(form).find('input[type="submit"]').button('loading');    }; +  resetButtons = function(submitEvent) { +    var form = $('form.submitted') +    // bootstrap loading state: +    $(form).find('input[type="submit"]').button('reset'); +    $(form).removeClass('submitted') +  }; +    //    // PUBLIC FUNCTIONS    // @@ -70,24 +77,36 @@    //    srp.error = function(message) {      clear_errors(); -    var element, error, field; +    var errors = extractErrors(message); +    displayErrors(errors); +    resetButtons(); +  } + +  function extractErrors(message) {      if ($.isPlainObject(message) && message.errors) { -      for (field in message.errors) { -        if (field == 'base') { -          alert_message(message.errors[field]); -          continue; -        } -        error = message.errors[field]; -        element = $('form input[name$="[' + field + ']"]'); -        if (!element) { -          continue; -        } -        element.trigger('element:validate:fail.ClientSideValidations', error).data('valid', false); -      } -    } else if (message.error) { -      alert_message(message.error); +      return message.errors;      } else { -      alert_message(JSON.stringify(message)); +      return { +        base: (message.error || JSON.stringify(message)) +      }; +    } +  } + +  function displayErrors(errors) { +    for (var field in errors) { +      var error = errors[field]; +      if (field === 'base') { +        alert_message(error); +      } else { +        displayFieldError(field, error); +      } +    } +  } + +  function displayFieldError(field, error) { +    var element = $('form input[name$="[' + field + ']"]'); +    if (element) { +      element.trigger('element:validate:fail.ClientSideValidations', error).data('valid', false);      }    }; diff --git a/users/test/integration/browser/account_test.rb b/users/test/integration/browser/account_test.rb index 1deda45..8e03856 100644 --- a/users/test/integration/browser/account_test.rb +++ b/users/test/integration/browser/account_test.rb @@ -27,6 +27,17 @@ class AccountTest < BrowserIntegrationTest      User.find_by_login(username).account.destroy    end +  test "failed login" do +    visit '/' +    click_on 'Log In' +    fill_in 'Username', with: "username" +    fill_in 'Password', with: "wrong password" +    click_on 'Log In' +    assert page.has_selector? 'input.btn-primary.disabled' +    assert page.has_content? I18n.t(:invalid_user_pass) +    assert page.has_no_selector? 'input.btn-primary.disabled' +  end +    test "change password" do      username, password = submit_signup      click_on "Account Settings"  | 
