X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/2d111c0f34613779bb730f1d0a823fa48e9d8439..13994ca6caa0e253856126fc8029d0e3140f1bfd:/test/controllers/confirmations_controller_test.rb diff --git a/test/controllers/confirmations_controller_test.rb b/test/controllers/confirmations_controller_test.rb index bae0158cd..774efdb9c 100644 --- a/test/controllers/confirmations_controller_test.rb +++ b/test/controllers/confirmations_controller_test.rb @@ -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" } ) @@ -37,9 +37,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_get user = build(:user, :pending) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create.token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } assert_response :success @@ -49,9 +48,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_get_already_confirmed user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create.token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) # Get the confirmation page get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } @@ -64,16 +62,14 @@ class UsersControllerTest < ActionDispatch::IntegrationTest # Now try to get the confirmation page again get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } - assert_response :redirect assert_redirected_to root_path end def test_confirm_success_no_token_no_referer user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create.token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) post logout_path @@ -85,9 +81,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_success_good_token_no_referer user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create.token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } assert_redirected_to welcome_path @@ -96,9 +91,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_success_bad_token_no_referer user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create.token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) post logout_path session_for(create(:user)) @@ -111,13 +105,12 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_success_no_token_with_referer user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) post logout_path - post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path } assert_redirected_to login_path(:referer => new_diary_entry_path) assert_match(/Confirmed your account/, flash[:notice]) end @@ -125,25 +118,23 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_success_good_token_with_referer user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) - post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path } assert_redirected_to new_diary_entry_path end def test_confirm_success_bad_token_with_referer user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) post logout_path session_for(create(:user)) - post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path } assert_redirected_to login_path(:referer => new_diary_entry_path) assert_match(/Confirmed your account/, flash[:notice]) end @@ -151,11 +142,12 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_expired_token user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create(:expiry => 1.day.ago).token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) - post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + travel 2.weeks do + post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + end assert_redirected_to :action => "confirm" assert_match(/confirmation code has expired/, flash[:error]) end @@ -163,17 +155,16 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_already_confirmed user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) - post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path } assert_redirected_to new_diary_entry_path post logout_path - confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token - post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) + post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path } assert_redirected_to login_path assert_match(/already been confirmed/, flash[:error]) end @@ -181,15 +172,13 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_deleted user = build(:user, :pending) stub_gravatar_request(user.email) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } - confirm_string = User.find_by(:email => user.email).tokens.create.token + post users_path, :params => { :user => user.attributes } + confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user) - User.find_by(:display_name => user.display_name).update(:status => "deleted") + User.find_by(:display_name => user.display_name).hide! # Get the confirmation page get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string } - assert_response :redirect assert_redirected_to root_path # Confirm the user @@ -200,18 +189,17 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_resend_success user = build(:user, :pending) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } + post users_path, :params => { :user => user.attributes } 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 - assert_response :redirect assert_redirected_to login_path - assert_match(/sent a new confirmation/, flash[:notice]) + assert_equal("confirmations/resend_success_flash", flash[:notice][:partial]) + assert_equal({ :email => user.email, :sender => Settings.email_from }, flash[:notice][:locals]) email = ActionMailer::Base.deliveries.last @@ -220,36 +208,18 @@ class UsersControllerTest < ActionDispatch::IntegrationTest ActionMailer::Base.deliveries.clear end - def test_confirm_resend_no_token - user = build(:user, :pending) - # only complete first half of registration - post user_new_path, :params => { :user => user.attributes } - - assert_no_difference "ActionMailer::Base.deliveries.size" do - perform_enqueued_jobs do - get user_confirm_resend_path(user) - end - end - - assert_response :redirect - assert_redirected_to login_path - assert_match "User #{user.display_name} not found.", flash[:error] - end - def test_confirm_resend_deleted user = build(:user, :pending) - post user_new_path, :params => { :user => user.attributes } - post user_save_path, :params => { :read_ct => 1, :read_tou => 1 } + post users_path, :params => { :user => user.attributes } - User.find_by(:display_name => user.display_name).update(:status => "deleted") + User.find_by(:display_name => user.display_name).hide! 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 - assert_response :redirect assert_redirected_to login_path assert_match "User #{user.display_name} not found.", flash[:error] end @@ -257,18 +227,17 @@ 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 - assert_response :redirect assert_redirected_to login_path assert_match "User No Such User not found.", flash[:error] end def test_confirm_email_get user = create(:user) - confirm_string = user.tokens.create.token + confirm_string = user.generate_token_for(:new_email) get user_confirm_email_path, :params => { :confirm_string => confirm_string } assert_response :success @@ -278,28 +247,25 @@ class UsersControllerTest < ActionDispatch::IntegrationTest def test_confirm_email_success user = create(:user, :new_email => "test-new@example.com") stub_gravatar_request(user.new_email) - confirm_string = user.tokens.create.token + confirm_string = user.generate_token_for(:new_email) post user_confirm_email_path, :params => { :confirm_string => confirm_string } - assert_response :redirect - assert_redirected_to :controller => :users, :action => :account, :display_name => user.display_name + assert_redirected_to edit_account_path assert_match(/Confirmed your change of email address/, flash[:notice]) end def test_confirm_email_already_confirmed user = create(:user) - confirm_string = user.tokens.create.token + confirm_string = user.generate_token_for(:new_email) post user_confirm_email_path, :params => { :confirm_string => confirm_string } - assert_response :redirect - assert_redirected_to :controller => :users, :action => :account, :display_name => user.display_name + assert_redirected_to edit_account_path assert_match(/already been confirmed/, flash[:error]) end def test_confirm_email_bad_token post user_confirm_email_path, :params => { :confirm_string => "XXXXX" } - assert_response :success - assert_template :confirm_email + assert_redirected_to edit_account_path assert_match(/confirmation code has expired or does not exist/, flash[:error]) end @@ -311,12 +277,11 @@ class UsersControllerTest < ActionDispatch::IntegrationTest # switch to email that has a gravatar user = create(:user, :new_email => "test-new@example.com") stub_gravatar_request(user.new_email, 200) - confirm_string = user.tokens.create.token + confirm_string = user.generate_token_for(:new_email) # precondition gravatar should be turned off assert_not user.image_use_gravatar post user_confirm_email_path, :params => { :confirm_string => confirm_string } - assert_response :redirect - assert_redirected_to :controller => :users, :action => :account, :display_name => user.display_name + assert_redirected_to edit_account_path assert_match(/Confirmed your change of email address/, flash[:notice]) # gravatar use should now be enabled assert User.find(user.id).image_use_gravatar @@ -326,12 +291,11 @@ class UsersControllerTest < ActionDispatch::IntegrationTest # switch to email without a gravatar user = create(:user, :new_email => "test-new@example.com", :image_use_gravatar => true) stub_gravatar_request(user.new_email, 404) - confirm_string = user.tokens.create.token + confirm_string = user.generate_token_for(:new_email) # precondition gravatar should be turned on assert user.image_use_gravatar post user_confirm_email_path, :params => { :confirm_string => confirm_string } - assert_response :redirect - assert_redirected_to :controller => :users, :action => :account, :display_name => user.display_name + assert_redirected_to edit_account_path assert_match(/Confirmed your change of email address/, flash[:notice]) # gravatar use should now be disabled assert_not User.find(user.id).image_use_gravatar