From e7b360fd7acfaa3428b774389baf9626f7ff026c Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Sun, 17 Aug 2014 14:34:26 -0400 Subject: [PATCH] 3604: Fix user_agreements behavior, update tests to expect redirects. --- .../app/assets/javascripts/user_agreements.js | 9 ++++++++ .../app/controllers/application_controller.rb | 19 +++++++++------- .../app/views/user_agreements/index.html.erb | 22 +++++-------------- .../functional/projects_controller_test.rb | 17 +++++++++----- 4 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 apps/workbench/app/assets/javascripts/user_agreements.js diff --git a/apps/workbench/app/assets/javascripts/user_agreements.js b/apps/workbench/app/assets/javascripts/user_agreements.js new file mode 100644 index 0000000000..688bd0b29a --- /dev/null +++ b/apps/workbench/app/assets/javascripts/user_agreements.js @@ -0,0 +1,9 @@ +$('#open_user_agreement input[name="checked[]"]').on('click', function() { + var dialog = $('#open_user_agreement')[0] + $('input[type=submit]', dialog).prop('disabled',false); + $('input[name="checked[]"]', dialog).each(function(){ + if(!this.checked) { + $('input[type=submit]', dialog).prop('disabled',true); + } + }); +}); diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index de0e3438d4..9963e2a13c 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -512,19 +512,22 @@ class ApplicationController < ActionController::Base end end + helper_method :unsigned_user_agreements + def unsigned_user_agreements + @signed_ua_uuids ||= UserAgreement.signatures.map &:head_uuid + @unsigned_user_agreements ||= UserAgreement.all.map do |ua| + if not @signed_ua_uuids.index ua.uuid + Collection.find(ua.uuid) + end + end.compact + end + def check_user_agreements if current_user && !current_user.is_active if not current_user.is_invited return redirect_to inactive_users_path, return_to: request.fullpath end - signatures = UserAgreement.signatures - @signed_ua_uuids = UserAgreement.signatures.map &:head_uuid - @required_user_agreements = UserAgreement.all.map do |ua| - if not @signed_ua_uuids.index ua.uuid - Collection.find(ua.uuid) - end - end.compact - if @required_user_agreements.empty? + if unsigned_user_agreements.empty? # No agreements to sign. Perhaps we just need to ask? current_user.activate if !current_user.is_active diff --git a/apps/workbench/app/views/user_agreements/index.html.erb b/apps/workbench/app/views/user_agreements/index.html.erb index 49516eb67d..d37360188d 100644 --- a/apps/workbench/app/views/user_agreements/index.html.erb +++ b/apps/workbench/app/views/user_agreements/index.html.erb @@ -1,27 +1,27 @@ <% content_for :breadcrumbs do raw '' end %> -<% n_files = @required_user_agreements.collect(&:files).flatten(1).count %> +<% n_files = unsigned_user_agreements.collect(&:files).flatten(1).count %> <% content_for :page_title do %> <% if n_files == 1 %> -<%= @required_user_agreements.first.files.first[1].sub(/\.[a-z]{3,4}$/,'') %> +<%= unsigned_user_agreements.first.files.first[1].sub(/\.[a-z]{3,4}$/,'') %> <% else %> User agreements <% end %> <% end %> -<%= form_for(@required_user_agreements.first, {url: {action: 'sign', controller: 'user_agreements'}, method: 'post'}) do |f| %> +<%= form_for(unsigned_user_agreements.first, {url: {action: 'sign', controller: 'user_agreements'}, method: 'post'}) do |f| %> <%= hidden_field_tag :return_to, request.url %>
Please check <%= n_files > 1 ? 'each' : 'the' %> box below to indicate that you have read and accepted the user agreement<%= 's' if n_files > 1 %>.
<% if n_files == 1 and (Rails.configuration.show_user_agreement_inline rescue false) %> - <% ua = @required_user_agreements.first; file = ua.files.first %> + <% ua = unsigned_user_agreements.first; file = ua.files.first %> " type="<%= Rack::Mime::MIME_TYPES[file[1].match(/\.\w+$/)[0]] rescue '' %>" width="100%" height="400px"> <% end %>
- <% @required_user_agreements.each do |ua| %> + <% unsigned_user_agreements.each do |ua| %> <% ua.files.each do |file| %> <%= f.label 'checked[]', class: 'checkbox inline' do %> <%= check_box_tag 'checked[]', "#{ua.uuid}/#{file[0]}/#{file[1]}", false %> @@ -37,15 +37,3 @@ User agreements
<% end %> - -<% content_for :footer_js do %> -$('#open_user_agreement input[name="checked[]"]').on('click', function() { - var dialog = $('#open_user_agreement')[0] - $('input[type=submit]', dialog).prop('disabled',false); - $('input[name="checked[]"]', dialog).each(function(){ - if(!this.checked) { - $('input[type=submit]', dialog).prop('disabled',true); - } - }); -}); -<% end %> diff --git a/apps/workbench/test/functional/projects_controller_test.rb b/apps/workbench/test/functional/projects_controller_test.rb index ae0cad09e3..01ccf18676 100644 --- a/apps/workbench/test/functional/projects_controller_test.rb +++ b/apps/workbench/test/functional/projects_controller_test.rb @@ -1,13 +1,18 @@ require 'test_helper' class ProjectsControllerTest < ActionController::TestCase - test "inactive user is asked to sign user agreements on front page" do + test "invited user is asked to sign user agreements on front page" do get :index, {}, session_for(:inactive) - assert_response :success - assert_not_empty assigns(:required_user_agreements), - "Inactive user did not have required_user_agreements" - assert_template 'user_agreements/index', - "Inactive user was not presented with a user agreement at the front page" + assert_response :redirect + assert_equal(user_agreements_url, @response.redirect_url, + "Inactive user was not redirected to user_agreements page") + end + + test "uninvited user is asked to wait for activation" do + get :index, {}, session_for(:inactive_uninvited) + assert_response :redirect + assert_equal(inactive_users_url, @response.redirect_url, + "Uninvited user was not redirected to inactive user page") end [[:active, true], -- 2.30.2