diff --git a/app/views/confirmations/confirm.html.erb b/app/views/confirmations/confirm.html.erb index 4f98a85399..08dea27b63 100644 --- a/app/views/confirmations/confirm.html.erb +++ b/app/views/confirmations/confirm.html.erb @@ -28,7 +28,9 @@

- <%= t ".resend_html", - :reconfirm_link => link_to(t(".click_here"), url_for(:action => "confirm_resend")) %> + <%= t ".if_need_resend" %>

+ <%= bootstrap_form_tag :url => url_for(:action => "confirm_resend") do |f| %> + <%= f.submit t(".resend_button"), :class => "btn btn-outline-primary" %> + <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 7faf3bebcf..417267808b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1726,8 +1726,8 @@ en: success: "Confirmed your account, thanks for signing up!" already active: "This account has already been confirmed." unknown token: "That confirmation code has expired or does not exist." - resend_html: "If you need us to resend the confirmation email, %{reconfirm_link}." - click_here: click here + if_need_resend: "If you need us to resend the confirmation email, click the button below." + resend_button: Resend the confirmation email confirm_resend: failure: "User %{name} not found." confirm_email: diff --git a/config/routes.rb b/config/routes.rb index 0e00da9e3b..068f3915e2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -186,7 +186,7 @@ post "/user/new" => "users#create" get "/user/terms" => "users#terms" post "/user/save" => "users#save" - get "/user/:display_name/confirm/resend" => "confirmations#confirm_resend", :as => :user_confirm_resend + post "/user/:display_name/confirm/resend" => "confirmations#confirm_resend", :as => :user_confirm_resend match "/user/:display_name/confirm" => "confirmations#confirm", :via => [:get, :post] match "/user/confirm" => "confirmations#confirm", :via => [:get, :post] match "/user/confirm-email" => "confirmations#confirm_email", :via => [:get, :post] diff --git a/test/controllers/confirmations_controller_test.rb b/test/controllers/confirmations_controller_test.rb index 79213441f1..c8926eb755 100644 --- a/test/controllers/confirmations_controller_test.rb +++ b/test/controllers/confirmations_controller_test.rb @@ -13,7 +13,7 @@ def test_routes { :controller => "confirmations", :action => "confirm", :display_name => "username" } ) assert_routing( - { :path => "/user/username/confirm/resend", :method => :get }, + { :path => "/user/username/confirm/resend", :method => :post }, { :controller => "confirmations", :action => "confirm_resend", :display_name => "username" } ) @@ -193,7 +193,7 @@ def test_confirm_resend_success assert_difference "ActionMailer::Base.deliveries.size", 1 do perform_enqueued_jobs do - get user_confirm_resend_path(user) + post user_confirm_resend_path(user) end end @@ -216,7 +216,7 @@ def test_confirm_resend_deleted assert_no_difference "ActionMailer::Base.deliveries.size" do perform_enqueued_jobs do - get user_confirm_resend_path(user) + post user_confirm_resend_path(user) end end @@ -227,7 +227,7 @@ def test_confirm_resend_deleted def test_confirm_resend_unknown_user assert_no_difference "ActionMailer::Base.deliveries.size" do perform_enqueued_jobs do - get user_confirm_resend_path(:display_name => "No Such User") + post user_confirm_resend_path(:display_name => "No Such User") end end diff --git a/test/system/confirmation_resend_test.rb b/test/system/confirmation_resend_test.rb deleted file mode 100644 index 6ef85818ad..0000000000 --- a/test/system/confirmation_resend_test.rb +++ /dev/null @@ -1,23 +0,0 @@ -require "application_system_test_case" - -class ConfirmationResendSystemTest < ApplicationSystemTestCase - def setup - @user = build(:user) - visit user_new_path - - within ".new_user" do - fill_in "Email", :with => @user.email - fill_in "Display Name", :with => @user.display_name - fill_in "Password", :with => "testtest" - fill_in "Confirm Password", :with => "testtest" - click_on "Sign Up" - end - end - - test "flash message should not contain raw html" do - visit user_confirm_resend_path(@user) - - assert_content "sent a new confirmation" - assert_no_content "

" - end -end diff --git a/test/system/user_signup_test.rb b/test/system/user_signup_test.rb index ebd91340a5..2fb90fc3a4 100644 --- a/test/system/user_signup_test.rb +++ b/test/system/user_signup_test.rb @@ -38,6 +38,44 @@ def setup assert_content "Welcome!" end + test "Sign up with confirmation email resending" do + visit root_path + + click_on "Sign Up" + + within_content_body do + fill_in "Email", :with => "new_user_account@example.com" + fill_in "Display Name", :with => "new_user_account" + fill_in "Password", :with => "new_user_password" + fill_in "Confirm Password", :with => "new_user_password" + + assert_emails 2 do + click_on "Sign Up" + + assert_content "We sent you a confirmation email" + + click_on "Resend the confirmation email" + + assert_content "Email Address or Username" + end + end + + assert_content "sent a new confirmation" + assert_no_content "

" + + email = ActionMailer::Base.deliveries.last + assert_equal 1, email.to.count + assert_equal "new_user_account@example.com", email.to.first + email_text = email.parts[0].parts[0].decoded + match = %r{/user/new_user_account/confirm\?confirm_string=\S+}.match(email_text) + assert_not_nil match + + visit match[0] + + assert_content "new_user_account" + assert_content "Welcome!" + end + test "Sign up from login page" do visit login_path