]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/5448'
authorTom Hughes <tom@compton.nu>
Sun, 29 Dec 2024 19:11:13 +0000 (19:11 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 29 Dec 2024 19:11:13 +0000 (19:11 +0000)
app/assets/javascripts/diary_entry.js
app/controllers/api/messages_controller.rb
app/controllers/users_controller.rb
app/views/confirmations/confirm.html.erb
config/locales/en.yml
config/routes.rb
test/application_system_test_case.rb
test/controllers/confirmations_controller_test.rb
test/system/confirmation_resend_test.rb [deleted file]
test/system/user_signup_test.rb

index 625d43a5228f0b07a391f988a43cae3327364e67..bd5fd4dd62f359ecd0b163e555c87bd6420bd0f3 100644 (file)
@@ -2,8 +2,10 @@ $(document).ready(function () {
   var marker, map;
 
   function setLocation(e) {
-    $("#latitude").val(e.latlng.lat);
-    $("#longitude").val(e.latlng.lng);
+    const latlng = e.latlng.wrap();
+
+    $("#latitude").val(latlng.lat);
+    $("#longitude").val(latlng.lng);
 
     if (marker) {
       map.removeLayer(marker);
index cbbd8539cc76e7333437615341a8a2f9b45ba06f..ea5abe8dfc57a2afcab4638ae390dcd61163af15 100644 (file)
@@ -5,7 +5,6 @@ module Api
     before_action :authorize
 
     before_action :check_api_writable, :only => [:create, :update, :destroy]
-    before_action :check_api_readable, :except => [:create, :update, :destroy]
 
     authorize_resource
 
index 471215c92234f8535cd459dad4b44e52b5f929f4..fa311ab39e0d302a241f0023c4b89795828641c5 100644 (file)
@@ -77,7 +77,24 @@ class UsersController < ApplicationController
         render :action => "new"
       else
         # Save the user record
-        save_new_user params[:email_hmac], params[:referer]
+        if save_new_user params[:email_hmac]
+          SIGNUP_IP_LIMITER&.update(request.remote_ip)
+          SIGNUP_EMAIL_LIMITER&.update(canonical_email(current_user.email))
+
+          flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo)
+
+          referer = welcome_path(welcome_options(params[:referer]))
+
+          if current_user.status == "active"
+            successful_login(current_user, referer)
+          else
+            session[:pending_user] = current_user.id
+            UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), referer).deliver_later
+            redirect_to :controller => :confirmations, :action => :confirm, :display_name => current_user.display_name
+          end
+        else
+          render :action => "new", :referer => params[:referer]
+        end
       end
     end
   end
@@ -238,7 +255,7 @@ class UsersController < ApplicationController
 
   private
 
-  def save_new_user(email_hmac, referer = nil)
+  def save_new_user(email_hmac)
     current_user.data_public = true
     current_user.description = "" if current_user.description.nil?
     current_user.creation_address = request.remote_ip
@@ -254,24 +271,7 @@ class UsersController < ApplicationController
       current_user.activate
     end
 
-    if current_user.save
-      SIGNUP_IP_LIMITER&.update(request.remote_ip)
-      SIGNUP_EMAIL_LIMITER&.update(canonical_email(current_user.email))
-
-      flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo)
-
-      referer = welcome_path(welcome_options(referer))
-
-      if current_user.status == "active"
-        successful_login(current_user, referer)
-      else
-        session[:pending_user] = current_user.id
-        UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), referer).deliver_later
-        redirect_to :controller => :confirmations, :action => :confirm, :display_name => current_user.display_name
-      end
-    else
-      render :action => "new", :referer => params[:referer]
-    end
+    current_user.save
   end
 
   def welcome_options(referer = nil)
index 4f98a85399a206d93f0be0dca30d3a9d49676e40..08dea27b633e7b14a823d80fa26db567aa4e0356 100644 (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 %>
index cb34b665dc7a03c899324f45665d9235426e4880..5628d3ea9476181b57fbecf684b0ca14201e5bc4 100644 (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:
index 58d629d69ecce844b8646927f843baf5350a9cf2..d7b1acd3a99e73642115b26542da98f462f7a83f 100644 (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]
index d2c3d5196ab9b5ccbcae32aaaed086e03650d7f5..0ddb8a87ad73f91606df90af224df851c9919c06 100644 (file)
@@ -41,4 +41,8 @@ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
   def within_sidebar(&)
     within("#sidebar_content", &)
   end
+
+  def within_content_body(&)
+    within("#content > .content-body", &)
+  end
 end
index 79213441f19a2e8cf757429e91ab2205b0020e12..c8926eb7552485d59e2da95241f24c9a0318b515 100644 (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
 
diff --git a/test/system/confirmation_resend_test.rb b/test/system/confirmation_resend_test.rb
deleted file mode 100644 (file)
index 6ef8581..0000000
+++ /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 "<p>"
-  end
-end
index 0e02b904f7f44a830fa5d2eba043fef1e7c70ba6..2fb90fc3a41acf81873d53ab3d640bc9b34e1771 100644 (file)
 require "application_system_test_case"
 
 class UserSignupTest < ApplicationSystemTestCase
+  include ActionMailer::TestHelper
+
+  def setup
+    stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
+  end
+
+  test "Sign up with confirmation email" 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 1 do
+        click_on "Sign Up"
+
+        assert_content "We sent you a confirmation email"
+      end
+    end
+
+    email = ActionMailer::Base.deliveries.first
+    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 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
 
     click_on "Sign up"
 
-    assert_content "Confirm Password"
+    within_content_body do
+      assert_content "Confirm Password"
+    end
   end
 
   test "Show OpenID form when OpenID provider button is clicked" do
     visit login_path
 
-    assert_no_field "OpenID URL"
-    assert_no_button "Continue"
+    within_content_body do
+      assert_no_field "OpenID URL"
+      assert_no_button "Continue"
 
-    click_on "Log in with OpenID"
+      click_on "Log in with OpenID"
 
-    assert_field "OpenID URL"
-    assert_button "Continue"
+      assert_field "OpenID URL"
+      assert_button "Continue"
+    end
   end
 end