Add tests for make_friend and remove_friend
This commit is contained in:
parent
573991e5a9
commit
3d5a613c5e
1 changed files with 106 additions and 0 deletions
|
@ -453,4 +453,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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue