# 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
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