X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/573991e5a9997d5ea14e430ae58a40ef0eaecd34..0d3a9ed9cb47ce3b89ea9eaffbb589f9a9ff6d22:/test/functional/user_controller_test.rb diff --git a/test/functional/user_controller_test.rb b/test/functional/user_controller_test.rb index fbceb3c05..f756b0514 100644 --- a/test/functional/user_controller_test.rb +++ b/test/functional/user_controller_test.rb @@ -437,12 +437,88 @@ class UserControllerTest < ActionController::TestCase # Check that the user account page will display and contains some relevant # information for the user - def test_view_user_account + def test_user_view_account + # Test a non-existent user get :view, {:display_name => "unknown"} assert_response :not_found + # Test a normal user get :view, {:display_name => "test"} assert_response :success + assert_select "div#userinformation" do + assert_select "a[href=/user/test/edits]", 1 + assert_select "a[href=/user/test/traces]", 1 + assert_select "a[href=/user/test/diary]", 1 + assert_select "a[href=/user/test/diary/comments]", 1 + assert_select "a[href=/user/test/account]", 0 + assert_select "a[href=/user/test/blocks]", 0 + assert_select "a[href=/user/test/blocks_by]", 0 + assert_select "a[href=/blocks/new/test]", 0 + end + + # Test a user who has been blocked + get :view, {:display_name => "blocked"} + assert_response :success + assert_select "div#userinformation" do + assert_select "a[href=/user/blocked/edits]", 1 + assert_select "a[href=/user/blocked/traces]", 1 + assert_select "a[href=/user/blocked/diary]", 1 + assert_select "a[href=/user/blocked/diary/comments]", 1 + assert_select "a[href=/user/blocked/account]", 0 + assert_select "a[href=/user/blocked/blocks]", 1 + assert_select "a[href=/user/blocked/blocks_by]", 0 + assert_select "a[href=/blocks/new/blocked]", 0 + end + + # Test a moderator who has applied blocks + get :view, {:display_name => "moderator"} + assert_response :success + assert_select "div#userinformation" do + assert_select "a[href=/user/moderator/edits]", 1 + assert_select "a[href=/user/moderator/traces]", 1 + assert_select "a[href=/user/moderator/diary]", 1 + assert_select "a[href=/user/moderator/diary/comments]", 1 + assert_select "a[href=/user/moderator/account]", 0 + assert_select "a[href=/user/moderator/blocks]", 0 + assert_select "a[href=/user/moderator/blocks_by]", 1 + assert_select "a[href=/blocks/new/moderator]", 0 + end + + # Login as a normal user + session[:user] = users(:normal_user).id + cookies["_osm_username"] = users(:normal_user).display_name + + # Test the normal user + get :view, {:display_name => "test"} + assert_response :success + assert_select "div#userinformation" do + assert_select "a[href=/user/test/edits]", 1 + assert_select "a[href=/traces/mine]", 1 + assert_select "a[href=/user/test/diary]", 1 + assert_select "a[href=/user/test/diary/comments]", 1 + assert_select "a[href=/user/test/account]", 1 + assert_select "a[href=/user/test/blocks]", 0 + assert_select "a[href=/user/test/blocks_by]", 0 + assert_select "a[href=/blocks/new/test]", 0 + end + + # Login as a moderator + session[:user] = users(:moderator_user).id + cookies["_osm_username"] = users(:moderator_user).display_name + + # Test the normal user + get :view, {:display_name => "test"} + assert_response :success + assert_select "div#userinformation" do + assert_select "a[href=/user/test/edits]", 1 + assert_select "a[href=/user/test/traces]", 1 + assert_select "a[href=/user/test/diary]", 1 + assert_select "a[href=/user/test/diary/comments]", 1 + assert_select "a[href=/user/test/account]", 0 + assert_select "a[href=/user/test/blocks]", 0 + assert_select "a[href=/user/test/blocks_by]", 0 + assert_select "a[href=/blocks/new/test]", 1 + end end def test_user_api_details @@ -453,4 +529,110 @@ class UserControllerTest < ActionController::TestCase get :api_details assert_response :success end + + def test_user_make_friend + # Get users to work with + user = users(:normal_user) + friend = users(:second_public_user) + + # Check that the users aren't already friends + assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first + + # Set the username cookie + @request.cookies["_osm_username"] = user.display_name + + # When not logged in a GET should ask us to login + get :make_friend, {:display_name => friend.display_name} + assert_redirected_to :controller => :user, :action => "login", :referer => make_friend_path(:display_name => friend.display_name) + + # When not logged in a POST should error + post :make_friend, {:display_name => friend.display_name} + assert_response :forbidden + 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} + assert_response :success + assert_template :make_friend + assert_select "form" do + assert_select "input[type=hidden][name=referer]", 0 + assert_select "input[type=submit]", 1 + end + 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} + assert_response :success + assert_template :make_friend + assert_select "form" do + assert_select "input[type=hidden][name=referer][value=/test]", 1 + assert_select "input[type=submit]", 1 + end + assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first + + # When logged in a POST should add the friendship + post :make_friend, {:display_name => friend.display_name}, {"user" => user} + assert_redirected_to user_path(:display_name => friend.display_name) + assert_match /is now your friend/, flash[:notice] + assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first + + # A second POST should report that the friendship already exists + post :make_friend, {:display_name => friend.display_name}, {"user" => user} + assert_redirected_to user_path(:display_name => friend.display_name) + assert_match /You are already friends with/, flash[:warning] + assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first + end + + def test_user_remove_friend + # Get users to work with + user = users(:normal_user) + friend = users(:public_user) + + # Check that the users are friends + assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first + + # Set the username cookie + @request.cookies["_osm_username"] = user.display_name + + # When not logged in a GET should ask us to login + get :remove_friend, {:display_name => friend.display_name} + assert_redirected_to :controller => :user, :action => "login", :referer => remove_friend_path(:display_name => friend.display_name) + + # When not logged in a POST should error + post :remove_friend, {:display_name => friend.display_name} + assert_response :forbidden + 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} + assert_response :success + assert_template :remove_friend + assert_select "form" do + assert_select "input[type=hidden][name=referer]", 0 + assert_select "input[type=submit]", 1 + end + 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} + assert_response :success + assert_template :remove_friend + assert_select "form" do + assert_select "input[type=hidden][name=referer][value=/test]", 1 + assert_select "input[type=submit]", 1 + end + 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} + 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} + 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 + end end