]> git.openstreetmap.org Git - rails.git/blobdiff - test/controllers/user_controller_test.rb
Make API and web roll back any open transactions on timeout
[rails.git] / test / controllers / user_controller_test.rb
index 7a1310d6e9c75bbfb087002d2b9e120857fdfd94..e309b1662b0d49073d23d552e0231cd937331c83 100644 (file)
@@ -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
@@ -393,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
@@ -403,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
 
@@ -413,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
 
@@ -424,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
@@ -434,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
 
@@ -444,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
 
@@ -474,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
@@ -489,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
@@ -510,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
@@ -535,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
@@ -690,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
@@ -875,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
@@ -889,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
@@ -948,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
@@ -985,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
@@ -1000,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
@@ -1142,6 +1203,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
@@ -1182,6 +1244,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
@@ -1321,7 +1384,7 @@ class UserControllerTest < ActionController::TestCase
     get :list, :page => 3
     assert_response :success
     assert_template :list
-    assert_select "table#user_list tr", :count => 20
+    assert_select "table#user_list tr", :count => 25
   end
 
   def test_list_post_confirm