Replace resent confirmation link with button

This commit is contained in:
Anton Khorev 2024-12-29 06:10:07 +03:00
parent 127e376bf0
commit fcfb7d4af1
6 changed files with 49 additions and 32 deletions

View file

@ -28,7 +28,9 @@
</h1>
<p class='text-body-secondary'>
<%= t ".resend_html",
:reconfirm_link => link_to(t(".click_here"), url_for(:action => "confirm_resend")) %>
<%= t ".if_need_resend" %>
</p>
<%= bootstrap_form_tag :url => url_for(:action => "confirm_resend") do |f| %>
<%= f.submit t(".resend_button"), :class => "btn btn-outline-primary" %>
<% end %>
<% end %>

View file

@ -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:

View file

@ -186,7 +186,7 @@ OpenStreetMap::Application.routes.draw do
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]

View file

@ -13,7 +13,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
{ :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 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
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 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
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 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
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

View file

@ -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 "<p>"
end
end

View file

@ -38,6 +38,44 @@ class UserSignupTest < ApplicationSystemTestCase
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 "<p>"
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