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
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
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)
def within_sidebar(&)
within("#sidebar_content", &)
end
+
+ def within_content_body(&)
+ within("#content > .content-body", &)
+ end
end
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 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