X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/f8de0c1811a21a552541acd2288d191e872ca434..f435fce007d7817bd35f3beb93f0e3a844446154:/test/controllers/user_controller_test.rb diff --git a/test/controllers/user_controller_test.rb b/test/controllers/user_controller_test.rb index 609f3fe67..027618631 100644 --- a/test/controllers/user_controller_test.rb +++ b/test/controllers/user_controller_test.rb @@ -2,7 +2,10 @@ require "test_helper" class UserControllerTest < ActionController::TestCase api_fixtures - fixtures :messages, :friends + + def setup + stub_hostip_requests + end ## # test all routes which lead to this controller @@ -209,6 +212,24 @@ class UserControllerTest < ActionController::TestCase end end + def test_new_view_logged_in + session[:user] = users(:normal_user).id + + get :new + assert_response :redirect + assert_redirected_to user_new_path(:cookie_test => "true") + get :new, :cookie_test => "true" + assert_response :redirect + assert_redirected_to root_path + + get :new, :referer => "/test" + assert_response :redirect + assert_redirected_to user_new_path(:referer => "/test", :cookie_test => "true") + get :new, :referer => "/test", :cookie_test => "true" + assert_response :redirect + assert_redirected_to "/test" + end + def test_new_success user = new_user @@ -332,6 +353,27 @@ class UserControllerTest < ActionController::TestCase assert_redirected_to "/test" end + def test_logout_with_token + token = users(:normal_user).tokens.create + + session[:token] = token.token + + get :logout + assert_response :success + assert_template :logout + assert_select "input[name=referer][value=?]", "" + assert_equal token.token, session[:token] + assert_not_nil UserToken.where(:id => token.id).first + + session_id = assert_select("input[name=session]").first["value"] + + get :logout, :session => session_id + assert_response :redirect + assert_redirected_to root_path + assert_nil session[:token] + assert_nil UserToken.where(:id => token.id).first + end + def test_confirm_get user = users(:inactive_user) confirm_string = user.tokens.create.token @@ -354,6 +396,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_no_token_no_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create.token @request.cookies["_osm_session"] = user.display_name @@ -364,6 +407,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_good_token_no_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create.token token = user.tokens.create.token @@ -374,6 +418,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_bad_token_no_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create.token token = users(:normal_user).tokens.create.token @@ -385,6 +430,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_no_token_with_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create(:referer => diary_new_path).token @request.cookies["_osm_session"] = user.display_name @@ -395,6 +441,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_good_token_with_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create(:referer => diary_new_path).token token = user.tokens.create.token @@ -405,6 +452,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_bad_token_with_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create(:referer => diary_new_path).token token = users(:normal_user).tokens.create.token @@ -435,6 +483,8 @@ class UserControllerTest < ActionController::TestCase end def test_confirm_resend_success + session[:token] = users(:inactive_user).tokens.create.token + assert_difference "ActionMailer::Base.deliveries.size", 1 do get :confirm_resend, :display_name => users(:inactive_user).display_name end @@ -450,7 +500,17 @@ class UserControllerTest < ActionController::TestCase ActionMailer::Base.deliveries.clear end - def test_confirm_resend_failure + def test_confirm_resend_no_token + assert_no_difference "ActionMailer::Base.deliveries.size" do + get :confirm_resend, :display_name => users(:inactive_user).display_name + end + + assert_response :redirect + assert_redirected_to login_path + assert_match "User Inactive User not found.", flash[:error] + end + + def test_confirm_resend_unknown_user assert_no_difference "ActionMailer::Base.deliveries.size" do get :confirm_resend, :display_name => "No Such User" end @@ -471,6 +531,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_email_success user = users(:second_public_user) + stub_gravatar_request(user.new_email) confirm_string = user.tokens.create.token post :confirm_email, :confirm_string => confirm_string @@ -496,6 +557,40 @@ class UserControllerTest < ActionController::TestCase assert_match /confirmation code has expired or does not exist/, flash[:error] end + ## + # test if testing for a gravatar works + # this happens when the email is actually changed + # which is triggered by the confirmation mail + def test_gravatar_auto_enable + # switch to email that has a gravatar + user = users(:first_gravatar_user) + stub_gravatar_request(user.new_email, 200) + confirm_string = user.tokens.create.token + # precondition gravatar should be turned off + assert !user.image_use_gravatar + post :confirm_email, :confirm_string => confirm_string + assert_response :redirect + assert_redirected_to :action => :account, :display_name => user.display_name + assert_match /Confirmed your change of email address/, flash[:notice] + # gravatar use should now be enabled + assert User.find(users(:first_gravatar_user).id).image_use_gravatar + end + + def test_gravatar_auto_disable + # switch to email without a gravatar + user = users(:second_gravatar_user) + stub_gravatar_request(user.new_email, 404) + confirm_string = user.tokens.create.token + # precondition gravatar should be turned on + assert user.image_use_gravatar + post :confirm_email, :confirm_string => confirm_string + assert_response :redirect + assert_redirected_to :action => :account, :display_name => user.display_name + assert_match /Confirmed your change of email address/, flash[:notice] + # gravatar use should now be disabled + assert !User.find(users(:second_gravatar_user).id).image_use_gravatar + end + def test_terms_new_user get :terms, {}, { :new_user => User.new } assert_response :success @@ -505,17 +600,53 @@ class UserControllerTest < ActionController::TestCase def test_terms_seen user = users(:normal_user) - get :terms, {}, { :user => user } + session[:user] = user.id + + get :terms assert_response :redirect assert_redirected_to :action => :account, :display_name => user.display_name end - def test_terms_not_seen + def test_terms_not_seen_without_referer user = users(:terms_not_seen_user) - get :terms, {}, { :user => user } + session[:user] = user.id + + get :terms assert_response :success assert_template :terms + + post :save, :user => { :consider_pd => true } + assert_response :redirect + assert_redirected_to :action => :account, :display_name => user.display_name + assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] + + user.reload + + assert_equal true, user.consider_pd + assert_not_nil user.terms_agreed + assert_equal true, user.terms_seen + end + + def test_terms_not_seen_with_referer + user = users(:terms_not_seen_user) + + session[:user] = user.id + + get :terms, :referer => "/test" + assert_response :success + assert_template :terms + + post :save, :user => { :consider_pd => true }, :referer => "/test" + assert_response :redirect + assert_redirected_to "/test" + assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] + + user.reload + + assert_equal true, user.consider_pd + assert_not_nil user.terms_agreed + assert_equal true, user.terms_seen end def test_go_public @@ -615,7 +746,8 @@ class UserControllerTest < ActionController::TestCase # Test setting a new password post :reset_password, :token => token.token, :user => { :pass_crypt => "new_password", :pass_crypt_confirmation => "new_password" } assert_response :redirect - assert_redirected_to :action => :login + assert_redirected_to root_path + assert_equal users(:inactive_user).id, session[:user] user = User.find(users(:inactive_user).id) assert_equal "active", user.status assert_equal true, user.email_valid @@ -681,7 +813,7 @@ class UserControllerTest < ActionController::TestCase assert_select "form#accountForm > fieldset > div.form-row > select#user_preferred_editor > option[selected]", false # Changing to an uploaded image should work - image = Rack::Test::UploadedFile.new("test/traces/1.gif", "image/gif") + image = Rack::Test::UploadedFile.new("test/gpx/fixtures/a.gif", "image/gif") post :account, { :display_name => user.display_name, :image_action => "new", :user => user.attributes.merge(:image => image) }, { :user => user.id } assert_response :success assert_template :account @@ -705,6 +837,11 @@ class UserControllerTest < ActionController::TestCase assert_select ".notice", /^User information updated successfully/ assert_select "form#accountForm > fieldset > div.form-row.accountImage input[name=image_action][checked]", false + # Adding external authentication should redirect to the auth provider + post :account, { :display_name => user.display_name, :user => user.attributes.merge(:auth_provider => "openid", :auth_uid => "gmail.com") }, { :user => user.id } + assert_response :redirect + assert_redirected_to auth_path(:provider => "openid", :openid_url => "https://www.google.com/accounts/o8/id", :origin => "/user/#{user.display_name}/account") + # Changing name to one that exists should fail new_attributes = user.attributes.dup.merge(:display_name => users(:public_user).display_name) post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user.id } @@ -795,6 +932,7 @@ class UserControllerTest < ActionController::TestCase end # Test a user who has been blocked + create(:user_block, :user => users(:blocked_user)) get :view, :display_name => "blocked" assert_response :success assert_select "div#userinformation" do @@ -809,6 +947,7 @@ class UserControllerTest < ActionController::TestCase end # Test a moderator who has applied blocks + create(:user_block, :creator => users(:moderator_user)) get :view, :display_name => "moderator" assert_response :success assert_select "div#userinformation" do @@ -868,7 +1007,7 @@ class UserControllerTest < ActionController::TestCase assert_select "contributor-terms", :count => 1 do assert_select "[agreed='true']" end - assert_select "img", :count => 1 + assert_select "img", :count => 0 assert_select "roles", :count => 1 do assert_select "role", :count => 0 end @@ -905,6 +1044,8 @@ class UserControllerTest < ActionController::TestCase end def test_api_details + create(:message, :read, :recipient => users(:normal_user)) + # check that nothing is returned when not logged in get :api_details assert_response :unauthorized @@ -920,7 +1061,7 @@ class UserControllerTest < ActionController::TestCase assert_select "contributor-terms", :count => 1 do assert_select "[agreed='true'][pd='false']" end - assert_select "img", :count => 1 + assert_select "img", :count => 0 assert_select "roles", :count => 1 do assert_select "role", :count => 0 end @@ -953,6 +1094,12 @@ class UserControllerTest < ActionController::TestCase end def test_api_gpx_files + trace1 = create(:trace, :user => users(:normal_user)) do |trace| + create(:tracetag, :trace => trace, :tag => "London") + end + trace2 = create(:trace, :user => users(:normal_user)) do |trace| + create(:tracetag, :trace => trace, :tag => "Birmingham") + end # check that nothing is returned when not logged in get :api_gpx_files assert_response :unauthorized @@ -964,10 +1111,10 @@ class UserControllerTest < ActionController::TestCase assert_equal "text/xml", response.content_type # check the data that is returned - assert_select "gpx_file[id='1']", 1 do + assert_select "gpx_file[id='#{trace1.id}']", 1 do assert_select "tag", "London" end - assert_select "gpx_file[id='4']", 1 do + assert_select "gpx_file[id='#{trace2.id}']", 1 do assert_select "tag", "Birmingham" end end @@ -1062,6 +1209,7 @@ class UserControllerTest < ActionController::TestCase # Get users to work with user = users(:normal_user) friend = users(:public_user) + create(:friend, :befriender => user, :befriendee => friend) # Check that the users are friends assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first @@ -1102,6 +1250,7 @@ class UserControllerTest < ActionController::TestCase # Get users to work with user = users(:normal_user) friend = users(:public_user) + create(:friend, :user_id => user.id, :friend_user_id => friend.id) # Check that the users are friends assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first @@ -1241,7 +1390,7 @@ class UserControllerTest < ActionController::TestCase get :list, :page => 3 assert_response :success assert_template :list - assert_select "table#user_list tr", :count => 19 + assert_select "table#user_list tr", :count => 26 end def test_list_post_confirm