]> git.openstreetmap.org Git - rails.git/blobdiff - test/controllers/user_controller_test.rb
Build pending users via factory
[rails.git] / test / controllers / user_controller_test.rb
index eb57e2689c7c059f5b88742a7c6c3104ca9ebc1d..8e1b079d4e3fcbb27156d5d538d8c91daaaf6913 100644 (file)
@@ -3,8 +3,8 @@ require "test_helper"
 class UserControllerTest < ActionController::TestCase
   api_fixtures
 
-  setup do
-    stub_request(:get, "http://api.hostip.info/country.php?ip=0.0.0.0")
+  def setup
+    stub_hostip_requests
   end
 
   ##
@@ -231,7 +231,7 @@ class UserControllerTest < ActionController::TestCase
   end
 
   def test_new_success
-    user = new_user
+    user = build(:user, :pending)
 
     assert_difference "User.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 1 do
@@ -252,7 +252,7 @@ class UserControllerTest < ActionController::TestCase
   end
 
   def test_new_duplicate_email
-    user = new_user
+    user = build(:user, :pending)
     user.email = users(:public_user).email
 
     assert_no_difference "User.count" do
@@ -267,7 +267,7 @@ class UserControllerTest < ActionController::TestCase
   end
 
   def test_new_duplicate_email_uppercase
-    user = new_user
+    user = build(:user, :pending)
     user.email = users(:public_user).email.upcase
 
     assert_no_difference "User.count" do
@@ -282,7 +282,7 @@ class UserControllerTest < ActionController::TestCase
   end
 
   def test_new_duplicate_name
-    user = new_user
+    user = build(:user, :pending)
     user.display_name = users(:public_user).display_name
 
     assert_no_difference "User.count" do
@@ -297,7 +297,7 @@ class UserControllerTest < ActionController::TestCase
   end
 
   def test_new_duplicate_name_uppercase
-    user = new_user
+    user = build(:user, :pending)
     user.display_name = users(:public_user).display_name.upcase
 
     assert_no_difference "User.count" do
@@ -312,7 +312,7 @@ class UserControllerTest < ActionController::TestCase
   end
 
   def test_save_referer_params
-    user = new_user
+    user = build(:user, :pending)
 
     assert_difference "User.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 1 do
@@ -768,7 +768,7 @@ class UserControllerTest < ActionController::TestCase
     assert_redirected_to :controller => :user, :action => "login", :referer => "/user/test/account"
 
     # Make sure that you are blocked when not logged in as the right user
-    get :account, { :display_name => user.display_name }, { :user => users(:public_user).id }
+    get :account, { :display_name => user.display_name }, { :user => users(:public_user) }
     assert_response :forbidden
 
     # Make sure we get the page when we are logged in as the right user
@@ -778,7 +778,7 @@ class UserControllerTest < ActionController::TestCase
 
     # Updating the description should work
     user.description = "new description"
-    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -787,7 +787,7 @@ class UserControllerTest < ActionController::TestCase
 
     # Changing to a invalid editor should fail
     user.preferred_editor = "unknown"
-    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select ".notice", false
@@ -796,7 +796,7 @@ class UserControllerTest < ActionController::TestCase
 
     # Changing to a valid editor should work
     user.preferred_editor = "potlatch2"
-    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -805,7 +805,7 @@ class UserControllerTest < ActionController::TestCase
 
     # Changing to the default editor should work
     user.preferred_editor = "default"
-    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -813,8 +813,8 @@ 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")
-    post :account, { :display_name => user.display_name, :image_action => "new", :user => user.attributes.merge(:image => image) }, { :user => user.id }
+    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 }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -822,7 +822,7 @@ class UserControllerTest < ActionController::TestCase
     assert_select "form#accountForm > fieldset > div.form-row.accountImage input[name=image_action][checked][value=?]", "keep"
 
     # Changing to a gravatar image should work
-    post :account, { :display_name => user.display_name, :image_action => "gravatar", :user => user.attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :image_action => "gravatar", :user => user.attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -830,7 +830,7 @@ class UserControllerTest < ActionController::TestCase
     assert_select "form#accountForm > fieldset > div.form-row.accountImage input[name=image_action][checked][value=?]", "gravatar"
 
     # Removing the image should work
-    post :account, { :display_name => user.display_name, :image_action => "delete", :user => user.attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :image_action => "delete", :user => user.attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -838,13 +838,13 @@ class UserControllerTest < ActionController::TestCase
     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 }
+    post :account, { :display_name => user.display_name, :user => user.attributes.merge(:auth_provider => "openid", :auth_uid => "gmail.com") }, { :user => user }
     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 }
+    post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select ".notice", false
@@ -853,7 +853,7 @@ class UserControllerTest < ActionController::TestCase
 
     # Changing name to one that exists should fail, regardless of case
     new_attributes = user.attributes.dup.merge(:display_name => users(:public_user).display_name.upcase)
-    post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select ".notice", false
@@ -862,7 +862,7 @@ class UserControllerTest < ActionController::TestCase
 
     # Changing name to one that doesn't exist should work
     new_attributes = user.attributes.dup.merge(:display_name => "new tester")
-    post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user.id }
+    post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user }
     assert_response :success
     assert_template :account
     assert_select "div#errorExplanation", false
@@ -875,7 +875,7 @@ class UserControllerTest < ActionController::TestCase
     # Changing email to one that exists should fail
     user.new_email = users(:public_user).email
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+      post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     end
     assert_response :success
     assert_template :account
@@ -886,7 +886,7 @@ class UserControllerTest < ActionController::TestCase
     # Changing email to one that exists should fail, regardless of case
     user.new_email = users(:public_user).email.upcase
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+      post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     end
     assert_response :success
     assert_template :account
@@ -897,7 +897,7 @@ class UserControllerTest < ActionController::TestCase
     # Changing email to one that doesn't exist should work
     user.new_email = "new_tester@example.com"
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+      post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
     end
     assert_response :success
     assert_template :account
@@ -1045,6 +1045,7 @@ class UserControllerTest < ActionController::TestCase
 
   def test_api_details
     create(:message, :read, :recipient => users(:normal_user))
+    create(:message, :sender => users(:normal_user))
 
     # check that nothing is returned when not logged in
     get :api_details
@@ -1094,6 +1095,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
@@ -1105,10 +1112,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
@@ -1131,7 +1138,7 @@ class UserControllerTest < ActionController::TestCase
     assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # When logged in a GET should get a confirmation page
-    get :make_friend, { :display_name => friend.display_name }, { :user => user.id }
+    get :make_friend, { :display_name => friend.display_name }, { :user => user }
     assert_response :success
     assert_template :make_friend
     assert_select "form" do
@@ -1142,7 +1149,7 @@ class UserControllerTest < ActionController::TestCase
 
     # When logged in a POST should add the friendship
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :make_friend, { :display_name => friend.display_name }, { :user => user.id }
+      post :make_friend, { :display_name => friend.display_name }, { :user => user }
     end
     assert_redirected_to user_path(:display_name => friend.display_name)
     assert_match /is now your friend/, flash[:notice]
@@ -1154,7 +1161,7 @@ class UserControllerTest < ActionController::TestCase
 
     # A second POST should report that the friendship already exists
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :make_friend, { :display_name => friend.display_name }, { :user => user.id }
+      post :make_friend, { :display_name => friend.display_name }, { :user => user }
     end
     assert_redirected_to user_path(:display_name => friend.display_name)
     assert_match /You are already friends with/, flash[:warning]
@@ -1170,7 +1177,7 @@ class UserControllerTest < ActionController::TestCase
     assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # The GET should preserve any referer
-    get :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+    get :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
     assert_response :success
     assert_template :make_friend
     assert_select "form" do
@@ -1181,7 +1188,7 @@ class UserControllerTest < ActionController::TestCase
 
     # When logged in a POST should add the friendship and refer us
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+      post :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
     end
     assert_redirected_to "/test"
     assert_match /is now your friend/, flash[:notice]
@@ -1194,7 +1201,7 @@ class UserControllerTest < ActionController::TestCase
 
   def test_make_friend_unkown_user
     # Should error when a bogus user is specified
-    get :make_friend, { :display_name => "No Such User" }, { :user => users(:normal_user).id }
+    get :make_friend, { :display_name => "No Such User" }, { :user => users(:normal_user) }
     assert_response :not_found
     assert_template :no_such_user
   end
@@ -1218,7 +1225,7 @@ class UserControllerTest < ActionController::TestCase
     assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # When logged in a GET should get a confirmation page
-    get :remove_friend, { :display_name => friend.display_name }, { :user => user.id }
+    get :remove_friend, { :display_name => friend.display_name }, { :user => user }
     assert_response :success
     assert_template :remove_friend
     assert_select "form" do
@@ -1228,13 +1235,13 @@ class UserControllerTest < ActionController::TestCase
     assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # When logged in a POST should remove the friendship
-    post :remove_friend, { :display_name => friend.display_name }, { :user => user.id }
+    post :remove_friend, { :display_name => friend.display_name }, { :user => user }
     assert_redirected_to user_path(:display_name => friend.display_name)
     assert_match /was removed from your friends/, flash[:notice]
     assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # A second POST should report that the friendship does not exist
-    post :remove_friend, { :display_name => friend.display_name }, { :user => user.id }
+    post :remove_friend, { :display_name => friend.display_name }, { :user => user }
     assert_redirected_to user_path(:display_name => friend.display_name)
     assert_match /is not one of your friends/, flash[:error]
     assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
@@ -1250,7 +1257,7 @@ class UserControllerTest < ActionController::TestCase
     assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # The GET should preserve any referer
-    get :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+    get :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
     assert_response :success
     assert_template :remove_friend
     assert_select "form" do
@@ -1260,7 +1267,7 @@ class UserControllerTest < ActionController::TestCase
     assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
 
     # When logged in a POST should remove the friendship and refer
-    post :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+    post :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
     assert_redirected_to "/test"
     assert_match /was removed from your friends/, flash[:notice]
     assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
@@ -1268,7 +1275,7 @@ class UserControllerTest < ActionController::TestCase
 
   def test_remove_friend_unkown_user
     # Should error when a bogus user is specified
-    get :remove_friend, { :display_name => "No Such User" }, { :user => users(:normal_user).id }
+    get :remove_friend, { :display_name => "No Such User" }, { :user => users(:normal_user) }
     assert_response :not_found
     assert_template :no_such_user
   end
@@ -1280,12 +1287,12 @@ class UserControllerTest < ActionController::TestCase
     assert_redirected_to :action => :login, :referer => set_status_user_path(:status => "suspended")
 
     # Now try as a normal user
-    get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user).id }
+    get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user) }
     assert_response :redirect
     assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
 
     # Finally try as an administrator
-    get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user).id }
+    get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user) }
     assert_response :redirect
     assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
     assert_equal "suspended", User.find(users(:normal_user).id).status
@@ -1298,12 +1305,12 @@ class UserControllerTest < ActionController::TestCase
     assert_redirected_to :action => :login, :referer => delete_user_path(:status => "suspended")
 
     # Now try as a normal user
-    get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user).id }
+    get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user) }
     assert_response :redirect
     assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
 
     # Finally try as an administrator
-    get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user).id }
+    get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user) }
     assert_response :redirect
     assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
 
@@ -1384,7 +1391,7 @@ class UserControllerTest < ActionController::TestCase
     get :list, :page => 3
     assert_response :success
     assert_template :list
-    assert_select "table#user_list tr", :count => 25
+    assert_select "table#user_list tr", :count => 26
   end
 
   def test_list_post_confirm
@@ -1480,17 +1487,4 @@ class UserControllerTest < ActionController::TestCase
     assert_equal "deleted", normal_user.reload.status
     assert_equal "deleted", confirmed_user.reload.status
   end
-
-  private
-
-  def new_user
-    user = User.new
-    user.status = "pending"
-    user.display_name = "new_tester"
-    user.email = "newtester@osm.org"
-    user.email_confirmation = "newtester@osm.org"
-    user.pass_crypt = "testtest"
-    user.pass_crypt_confirmation = "testtest"
-    user
-  end
 end