diff --git a/app/assets/javascripts/users.js b/app/assets/javascripts/users.js index fa203998830d6552f081c08c0bd7ed470d842231..e6c2fcc657e6062ba16df3de7e5f2eecb1b7d120 100644 --- a/app/assets/javascripts/users.js +++ b/app/assets/javascripts/users.js @@ -160,6 +160,8 @@ // $(document).ready(function() { + $('.hidden.js-show').removeClass('hidden'); + $('.js-show').show(); $('#new_user').submit(prevent_default); $('#new_user').submit(clear_field_errors); $('#new_user').submit(validate_password_length); diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index f56faab0225cc4c75209e06f01fb6662fa9f200b..1b2dc5d227e1b512ae823aa0b91fc7611f487beb 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -1,7 +1,7 @@ module UsersHelper def user_form_class(*classes) - (classes + ['user', 'form', (@user.new_record? ? 'new' : 'edit')]).compact.join(' ') + (classes + ['user', 'hidden', 'js-show', (@user.new_record? ? 'new' : 'edit')]).compact.join(' ') end def wrapped(item, options = {}) diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml index 6f3b324aa5b78d1c09f1ce54410c39957b448ae0..bb7e4bdda6e8e4228fda6e71c2be3f0bf4349a19 100644 --- a/app/views/sessions/new.html.haml +++ b/app/views/sessions/new.html.haml @@ -1,9 +1,9 @@ .span1 .span9 - = render :partial => 'users/warnings' %h2=t :login .lead=t :login_info - = simple_form_for [:api, @session], :validate => true, :html => { :id => :new_session, :class => 'form-horizontal' } do |f| + = render :partial => 'users/warnings' + = simple_form_for [:api, @session], validate: true, html: { id: :new_session, class: 'form-horizontal hidden js-show', style: "display:none;" } do |f| = f.input :login, :required => false, :label => t(:username), :input_html => { :id => :srp_username } = f.input :password, :required => false, :input_html => { :id => :srp_password } = f.button :wrapped, value: t(:login), cancel: home_path diff --git a/app/views/users/_warnings.html.haml b/app/views/users/_warnings.html.haml index 79ab1032f16d24479a97dbf4eb8e824e59efaaea..baf80a4409ce86450c1928a2d8ab0912d2812135 100644 --- a/app/views/users/_warnings.html.haml +++ b/app/views/users/_warnings.html.haml @@ -9,4 +9,4 @@ document.getElementById('cookie_warning').style.display = 'block'; } else { document.getElementById('cookie_warning').style.display = 'none'; - } \ No newline at end of file + } diff --git a/app/views/users/new.html.haml b/app/views/users/new.html.haml index 3478989b8040c145250643f235d57c6bd812052a..bc36068fce91bcafe87cff0984c9929728902b27 100644 --- a/app/views/users/new.html.haml +++ b/app/views/users/new.html.haml @@ -1,14 +1,18 @@ -# --# This form is handled entirely by javascript, so take care when changing element ids. +-# This form is handled entirely by javascript +-# Please take care when changing element ids. +-# +-# The form is hidden when no js is available +-# to prevent submission in the clear. -# -- form_options = {:url => '/not-used', :html => {:id => 'new_user', :class => user_form_class('form-horizontal')}, :validate => true} +- form_options = {url: '/not-used', html: {id: 'new_user', class: user_form_class('form-horizontal'), style: 'display:none'}, validate: true} .span1 .span9 - = render :partial => 'warnings' %h2=t :signup .lead=t :signup_info + = render :partial => 'warnings' = simple_form_for(@user, form_options) do |f| = f.input :login, :label => t(:username), :required => false, :input_html => { :id => :srp_username } = f.input :password, :required => false, :validate => true, :input_html => { :id => :srp_password } diff --git a/test/integration/browser/account_test.rb b/test/integration/browser/account_test.rb index 6d5f7f92f3e73fed5fe23b9c02e1a57431b3cb52..4e11520d54fe3b77a5c740a42b73a62e4c6219a7 100644 --- a/test/integration/browser/account_test.rb +++ b/test/integration/browser/account_test.rb @@ -123,6 +123,20 @@ class AccountTest < BrowserIntegrationTest assert page.has_content?("server failed") end + test "does not render signup form without js" do + Capybara.current_driver = :rack_test # no js + visit '/signup' + assert page.has_no_content?("Username") + assert page.has_no_content?("Password") + end + + test "does not render login form without js" do + Capybara.current_driver = :rack_test # no js + visit '/login' + assert page.has_no_content?("Username") + assert page.has_no_content?("Password") + end + def attempt_login(username, password) click_on 'Log In' fill_in 'Username', with: username diff --git a/test/support/browser_integration_test.rb b/test/support/browser_integration_test.rb index 2885c3abdecfd9ca90d559b0a4c0288ab67064b9..9cae8cb194bb70885e8bda8f42aeb85fefc91dcd 100644 --- a/test/support/browser_integration_test.rb +++ b/test/support/browser_integration_test.rb @@ -60,7 +60,6 @@ class BrowserIntegrationTest < ActionDispatch::IntegrationTest end def save_state - page.save_screenshot screenshot_path File.open(logfile_path, 'w') do |test_log| test_log.puts self.class.name test_log.puts "=========================" @@ -76,6 +75,9 @@ class BrowserIntegrationTest < ActionDispatch::IntegrationTest test_log.puts "------------------------" test_log.puts `tail log/test.log -n 200` end + page.save_screenshot screenshot_path + # some drivers do not support screenshots + rescue Capybara::NotSupportedByDriverError end end