From: Tom Hughes Date: Thu, 4 Jun 2020 16:40:13 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/2642' X-Git-Tag: live~2124 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/293fe68eff1923a00992e0a195ba025ab7bd9efa?hp=768a792a6175215855518c378b49a41e7b10b503 Merge remote-tracking branch 'upstream/pull/2642' --- diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb index f0cebb380..5b1d7df68 100644 --- a/app/abilities/ability.rb +++ b/app/abilities/ability.rb @@ -37,11 +37,12 @@ class Ability if Settings.status != "database_offline" can [:index, :new, :create, :show, :edit, :update, :destroy], ClientApplication can [:new, :create, :edit, :update, :comment, :subscribe, :unsubscribe], DiaryEntry + can [:make_friend, :remove_friend], Friendship can [:new, :create, :reply, :show, :inbox, :outbox, :mark, :destroy], Message can [:close, :reopen], Note can [:new, :create], Report can [:mine, :new, :create, :edit, :update, :destroy], Trace - can [:account, :go_public, :make_friend, :remove_friend], User + can [:account, :go_public], User if user.moderator? can [:hide, :hidecomment], DiaryEntry diff --git a/app/controllers/friendships_controller.rb b/app/controllers/friendships_controller.rb new file mode 100644 index 000000000..a983bec75 --- /dev/null +++ b/app/controllers/friendships_controller.rb @@ -0,0 +1,62 @@ +class FriendshipsController < ApplicationController + layout "site" + + before_action :authorize_web + before_action :set_locale + before_action :check_database_readable + + authorize_resource + + before_action :check_database_writable, :only => [:make_friend, :remove_friend] + + def make_friend + @new_friend = User.find_by(:display_name => params[:display_name]) + + if @new_friend + if request.post? + friendship = Friendship.new + friendship.befriender = current_user + friendship.befriendee = @new_friend + if current_user.is_friends_with?(@new_friend) + flash[:warning] = t "friendships.make_friend.already_a_friend", :name => @new_friend.display_name + elsif friendship.save + flash[:notice] = t "friendships.make_friend.success", :name => @new_friend.display_name + Notifier.friendship_notification(friendship).deliver_later + else + friendship.add_error(t("friendships.make_friend.failed", :name => @new_friend.display_name)) + end + + if params[:referer] + redirect_to params[:referer] + else + redirect_to user_path + end + end + else + render_unknown_user params[:display_name] + end + end + + def remove_friend + @friend = User.find_by(:display_name => params[:display_name]) + + if @friend + if request.post? + if current_user.is_friends_with?(@friend) + Friendship.where(:befriender => current_user, :befriendee => @friend).delete_all + flash[:notice] = t "friendships.remove_friend.success", :name => @friend.display_name + else + flash[:error] = t "friendships.remove_friend.not_a_friend", :name => @friend.display_name + end + + if params[:referer] + redirect_to params[:referer] + else + redirect_to user_path + end + end + else + render_unknown_user params[:display_name] + end + end +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 514b3f8ee..4b949fe07 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -10,7 +10,7 @@ class UsersController < ApplicationController authorize_resource before_action :require_self, :only => [:account] - before_action :check_database_writable, :only => [:new, :account, :confirm, :confirm_email, :lost_password, :reset_password, :go_public, :make_friend, :remove_friend] + before_action :check_database_writable, :only => [:new, :account, :confirm, :confirm_email, :lost_password, :reset_password, :go_public] before_action :require_cookies, :only => [:new, :login, :confirm] before_action :lookup_user_by_name, :only => [:set_status, :delete] before_action :allow_thirdparty_images, :only => [:show, :account] @@ -383,57 +383,6 @@ class UsersController < ApplicationController end end - def make_friend - @new_friend = User.find_by(:display_name => params[:display_name]) - - if @new_friend - if request.post? - friendship = Friendship.new - friendship.befriender = current_user - friendship.befriendee = @new_friend - if current_user.is_friends_with?(@new_friend) - flash[:warning] = t "users.make_friend.already_a_friend", :name => @new_friend.display_name - elsif friendship.save - flash[:notice] = t "users.make_friend.success", :name => @new_friend.display_name - Notifier.friend_notification(friendship).deliver_later - else - friendship.add_error(t("users.make_friend.failed", :name => @new_friend.display_name)) - end - - if params[:referer] - redirect_to params[:referer] - else - redirect_to :action => "show" - end - end - else - render_unknown_user params[:display_name] - end - end - - def remove_friend - @friend = User.find_by(:display_name => params[:display_name]) - - if @friend - if request.post? - if current_user.is_friends_with?(@friend) - Friendship.where(:befriender => current_user, :befriendee => @friend).delete_all - flash[:notice] = t "users.remove_friend.success", :name => @friend.display_name - else - flash[:error] = t "users.remove_friend.not_a_friend", :name => @friend.display_name - end - - if params[:referer] - redirect_to params[:referer] - else - redirect_to :action => "show" - end - end - else - render_unknown_user params[:display_name] - end - end - ## # sets a user's status def set_status diff --git a/app/mailers/notifier.rb b/app/mailers/notifier.rb index cebb46939..3c794cca9 100644 --- a/app/mailers/notifier.rb +++ b/app/mailers/notifier.rb @@ -106,17 +106,16 @@ class Notifier < ApplicationMailer end end - def friend_notification(friend) - with_recipient_locale friend.befriendee do - @friend = friend - @viewurl = user_url(@friend.befriender) - @friendurl = url_for(:controller => "users", :action => "make_friend", - :display_name => @friend.befriender.display_name) - @author = @friend.befriender.display_name - - attach_user_avatar(@friend.befriender) - mail :to => friend.befriendee.email, - :subject => I18n.t("notifier.friend_notification.subject", :user => friend.befriender.display_name) + def friendship_notification(friendship) + with_recipient_locale friendship.befriendee do + @friendship = friendship + @viewurl = user_url(@friendship.befriender) + @friendurl = make_friend_url(@friendship.befriender) + @author = @friendship.befriender.display_name + + attach_user_avatar(@friendship.befriender) + mail :to => friendship.befriendee.email, + :subject => I18n.t("notifier.friendship_notification.subject", :user => friendship.befriender.display_name) end end diff --git a/app/views/users/make_friend.html.erb b/app/views/friendships/make_friend.html.erb similarity index 100% rename from app/views/users/make_friend.html.erb rename to app/views/friendships/make_friend.html.erb diff --git a/app/views/users/remove_friend.html.erb b/app/views/friendships/remove_friend.html.erb similarity index 100% rename from app/views/users/remove_friend.html.erb rename to app/views/friendships/remove_friend.html.erb diff --git a/app/views/notifier/friend_notification.text.erb b/app/views/notifier/friend_notification.text.erb deleted file mode 100644 index e1db966ab..000000000 --- a/app/views/notifier/friend_notification.text.erb +++ /dev/null @@ -1,7 +0,0 @@ -<%= t '.had_added_you', :user => @friend.befriender.display_name %> - -<%= t '.see_their_profile', :userurl => @viewurl %> - -<% unless @friend.befriendee.is_friends_with?(@friend.befriender) -%> -<%= t '.befriend_them', :befriendurl => @friendurl %> -<% end -%> diff --git a/app/views/notifier/friend_notification.html.erb b/app/views/notifier/friendship_notification.html.erb similarity index 58% rename from app/views/notifier/friend_notification.html.erb rename to app/views/notifier/friendship_notification.html.erb index 083f8d3fc..24587a6e3 100644 --- a/app/views/notifier/friend_notification.html.erb +++ b/app/views/notifier/friendship_notification.html.erb @@ -1,9 +1,9 @@ -

<%= t ".had_added_you", :user => @friend.befriender.display_name %>

+

<%= t ".had_added_you", :user => @friendship.befriender.display_name %>

<%= message_body do %>

<%= raw t ".see_their_profile", :userurl => link_to(@viewurl, @viewurl) %>

- <% unless @friend.befriendee.is_friends_with?(@friend.befriender) -%> + <% unless @friendship.befriendee.is_friends_with?(@friendship.befriender) -%>

<%= raw t ".befriend_them", :befriendurl => link_to(@friendurl, @friendurl) %>

<% end -%> <% end %> diff --git a/app/views/notifier/friendship_notification.text.erb b/app/views/notifier/friendship_notification.text.erb new file mode 100644 index 000000000..da859d31c --- /dev/null +++ b/app/views/notifier/friendship_notification.text.erb @@ -0,0 +1,7 @@ +<%= t '.had_added_you', :user => @friendship.befriender.display_name %> + +<%= t '.see_their_profile', :userurl => @viewurl %> + +<% unless @friendship.befriendee.is_friends_with?(@friendship.befriender) -%> +<%= t '.befriend_them', :befriendurl => @friendurl %> +<% end -%> diff --git a/config/locales/en.yml b/config/locales/en.yml index 1ee3f2378..5ae211ffa 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -431,6 +431,18 @@ en: comment: Comment newer_comments: "Newer Comments" older_comments: "Older Comments" + friendships: + make_friend: + heading: "Add %{user} as a friend?" + button: "Add as friend" + success: "%{name} is now your friend!" + failed: "Sorry, failed to add %{name} as a friend." + already_a_friend: "You are already friends with %{name}." + remove_friend: + heading: "Unfriend %{user}?" + button: "Unfriend" + success: "%{name} was removed from your friends." + not_a_friend: "%{name} is not one of your friends." geocoder: search: title: @@ -1191,7 +1203,7 @@ en: hi: "Hi %{to_user}," header: "%{from_user} has sent you a message through OpenStreetMap with the subject %{subject}:" footer_html: "You can also read the message at %{readurl} and you can reply at %{replyurl}" - friend_notification: + friendship_notification: hi: "Hi %{to_user}," subject: "[OpenStreetMap] %{user} added you as a friend" had_added_you: "%{user} has added you as a friend on OpenStreetMap." @@ -2272,17 +2284,6 @@ en: flash success: "Home location saved successfully" go_public: flash success: "All your edits are now public, and you are now allowed to edit." - make_friend: - heading: "Add %{user} as a friend?" - button: "Add as friend" - success: "%{name} is now your friend!" - failed: "Sorry, failed to add %{name} as a friend." - already_a_friend: "You are already friends with %{name}." - remove_friend: - heading: "Unfriend %{user}?" - button: "Unfriend" - success: "%{name} was removed from your friends." - not_a_friend: "%{name} is not one of your friends." index: title: Users heading: Users diff --git a/config/routes.rb b/config/routes.rb index b48dad733..2744b1323 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -236,12 +236,14 @@ OpenStreetMap::Application.routes.draw do # user pages get "/user/:display_name" => "users#show", :as => "user" - match "/user/:display_name/make_friend" => "users#make_friend", :via => [:get, :post], :as => "make_friend" - match "/user/:display_name/remove_friend" => "users#remove_friend", :via => [:get, :post], :as => "remove_friend" match "/user/:display_name/account" => "users#account", :via => [:get, :post], :as => "user_account" get "/user/:display_name/set_status" => "users#set_status", :as => :set_status_user get "/user/:display_name/delete" => "users#delete", :as => :delete_user + # friendships + match "/user/:display_name/make_friend" => "friendships#make_friend", :via => [:get, :post], :as => "make_friend" + match "/user/:display_name/remove_friend" => "friendships#remove_friend", :via => [:get, :post], :as => "remove_friend" + # user lists match "/users" => "users#index", :via => [:get, :post] match "/users/:status" => "users#index", :via => [:get, :post] diff --git a/test/controllers/friendships_controller_test.rb b/test/controllers/friendships_controller_test.rb new file mode 100644 index 000000000..b25986d84 --- /dev/null +++ b/test/controllers/friendships_controller_test.rb @@ -0,0 +1,198 @@ +require "test_helper" + +class FriendshipsControllerTest < ActionDispatch::IntegrationTest + ## + # test all routes which lead to this controller + def test_routes + assert_routing( + { :path => "/user/username/make_friend", :method => :get }, + { :controller => "friendships", :action => "make_friend", :display_name => "username" } + ) + assert_routing( + { :path => "/user/username/make_friend", :method => :post }, + { :controller => "friendships", :action => "make_friend", :display_name => "username" } + ) + assert_routing( + { :path => "/user/username/remove_friend", :method => :get }, + { :controller => "friendships", :action => "remove_friend", :display_name => "username" } + ) + assert_routing( + { :path => "/user/username/remove_friend", :method => :post }, + { :controller => "friendships", :action => "remove_friend", :display_name => "username" } + ) + end + + def test_make_friend + # Get users to work with + user = create(:user) + friend = create(:user) + + # Check that the users aren't already friends + assert_nil Friendship.where(:befriender => user, :befriendee => friend).first + + # When not logged in a GET should ask us to login + get make_friend_path(friend) + assert_redirected_to login_path(:referer => make_friend_path(:display_name => friend.display_name)) + + # When not logged in a POST should error + post make_friend_path(friend) + assert_response :forbidden + assert_nil Friendship.where(:befriender => user, :befriendee => friend).first + + session_for(user) + + # When logged in a GET should get a confirmation page + get make_friend_path(friend) + 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 Friendship.where(:befriender => user, :befriendee => friend).first + + # When logged in a POST should add the friendship + assert_difference "ActionMailer::Base.deliveries.size", 1 do + perform_enqueued_jobs do + post make_friend_path(friend) + end + end + assert_redirected_to user_path(friend) + assert_match(/is now your friend/, flash[:notice]) + assert Friendship.where(:befriender => user, :befriendee => friend).first + email = ActionMailer::Base.deliveries.first + assert_equal 1, email.to.count + assert_equal friend.email, email.to.first + ActionMailer::Base.deliveries.clear + + # A second POST should report that the friendship already exists + assert_no_difference "ActionMailer::Base.deliveries.size" do + perform_enqueued_jobs do + post make_friend_path(friend) + end + end + assert_redirected_to user_path(friend) + assert_match(/You are already friends with/, flash[:warning]) + assert Friendship.where(:befriender => user, :befriendee => friend).first + end + + def test_make_friend_with_referer + # Get users to work with + user = create(:user) + friend = create(:user) + session_for(user) + + # Check that the users aren't already friends + assert_nil Friendship.where(:befriender => user, :befriendee => friend).first + + # The GET should preserve any referer + get make_friend_path(friend), :params => { :referer => "/test" } + 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 Friendship.where(:befriender => user, :befriendee => friend).first + + # When logged in a POST should add the friendship and refer us + assert_difference "ActionMailer::Base.deliveries.size", 1 do + perform_enqueued_jobs do + post make_friend_path(friend), :params => { :referer => "/test" } + end + end + assert_redirected_to "/test" + assert_match(/is now your friend/, flash[:notice]) + assert Friendship.where(:befriender => user, :befriendee => friend).first + email = ActionMailer::Base.deliveries.first + assert_equal 1, email.to.count + assert_equal friend.email, email.to.first + ActionMailer::Base.deliveries.clear + end + + def test_make_friend_unkown_user + # Should error when a bogus user is specified + session_for(create(:user)) + get make_friend_path(:display_name => "No Such User") + assert_response :not_found + assert_template :no_such_user + end + + def test_remove_friend + # Get users to work with + user = create(:user) + friend = create(:user) + create(:friendship, :befriender => user, :befriendee => friend) + + # Check that the users are friends + assert Friendship.where(:befriender => user, :befriendee => friend).first + + # When not logged in a GET should ask us to login + get remove_friend_path(friend) + assert_redirected_to login_path(:referer => remove_friend_path(:display_name => friend.display_name)) + + # When not logged in a POST should error + post remove_friend_path, :params => { :display_name => friend.display_name } + assert_response :forbidden + assert Friendship.where(:befriender => user, :befriendee => friend).first + + session_for(user) + + # When logged in a GET should get a confirmation page + get remove_friend_path(friend) + 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 Friendship.where(:befriender => user, :befriendee => friend).first + + # When logged in a POST should remove the friendship + post remove_friend_path(friend) + assert_redirected_to user_path(friend) + assert_match(/was removed from your friends/, flash[:notice]) + assert_nil Friendship.where(:befriender => user, :befriendee => friend).first + + # A second POST should report that the friendship does not exist + post remove_friend_path(friend) + assert_redirected_to user_path(friend) + assert_match(/is not one of your friends/, flash[:error]) + assert_nil Friendship.where(:befriender => user, :befriendee => friend).first + end + + def test_remove_friend_with_referer + # Get users to work with + user = create(:user) + friend = create(:user) + create(:friendship, :befriender => user, :befriendee => friend) + session_for(user) + + # Check that the users are friends + assert Friendship.where(:befriender => user, :befriendee => friend).first + + # The GET should preserve any referer + get remove_friend_path(friend), :params => { :referer => "/test" } + 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 Friendship.where(:befriender => user, :befriendee => friend).first + + # When logged in a POST should remove the friendship and refer + post remove_friend_path(friend), :params => { :referer => "/test" } + assert_redirected_to "/test" + assert_match(/was removed from your friends/, flash[:notice]) + assert_nil Friendship.where(:befriender => user, :befriendee => friend).first + end + + def test_remove_friend_unkown_user + # Should error when a bogus user is specified + session_for(create(:user)) + get remove_friend_path(:display_name => "No Such User") + assert_response :not_found + assert_template :no_such_user + end +end diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index ed128902e..94e22f6c3 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -121,23 +121,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest { :controller => "users", :action => "account", :display_name => "username" } ) - assert_routing( - { :path => "/user/username/make_friend", :method => :get }, - { :controller => "users", :action => "make_friend", :display_name => "username" } - ) - assert_routing( - { :path => "/user/username/make_friend", :method => :post }, - { :controller => "users", :action => "make_friend", :display_name => "username" } - ) - assert_routing( - { :path => "/user/username/remove_friend", :method => :get }, - { :controller => "users", :action => "remove_friend", :display_name => "username" } - ) - assert_routing( - { :path => "/user/username/remove_friend", :method => :post }, - { :controller => "users", :action => "remove_friend", :display_name => "username" } - ) - assert_routing( { :path => "/user/username/set_status", :method => :get }, { :controller => "users", :action => "set_status", :display_name => "username" } @@ -1236,180 +1219,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest end end - def test_make_friend - # Get users to work with - user = create(:user) - friend = create(:user) - - # Check that the users aren't already friends - assert_nil Friendship.where(:befriender => user, :befriendee => friend).first - - # When not logged in a GET should ask us to login - get make_friend_path(friend) - assert_redirected_to :action => "login", :referer => make_friend_path(:display_name => friend.display_name) - - # When not logged in a POST should error - post make_friend_path(friend) - assert_response :forbidden - assert_nil Friendship.where(:befriender => user, :befriendee => friend).first - - session_for(user) - - # When logged in a GET should get a confirmation page - get make_friend_path(friend) - 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 Friendship.where(:befriender => user, :befriendee => friend).first - - # When logged in a POST should add the friendship - assert_difference "ActionMailer::Base.deliveries.size", 1 do - perform_enqueued_jobs do - post make_friend_path(friend) - end - end - assert_redirected_to user_path(friend) - assert_match(/is now your friend/, flash[:notice]) - assert Friendship.where(:befriender => user, :befriendee => friend).first - email = ActionMailer::Base.deliveries.first - assert_equal 1, email.to.count - assert_equal friend.email, email.to.first - ActionMailer::Base.deliveries.clear - - # A second POST should report that the friendship already exists - assert_no_difference "ActionMailer::Base.deliveries.size" do - perform_enqueued_jobs do - post make_friend_path(friend) - end - end - assert_redirected_to user_path(friend) - assert_match(/You are already friends with/, flash[:warning]) - assert Friendship.where(:befriender => user, :befriendee => friend).first - end - - def test_make_friend_with_referer - # Get users to work with - user = create(:user) - friend = create(:user) - session_for(user) - - # Check that the users aren't already friends - assert_nil Friendship.where(:befriender => user, :befriendee => friend).first - - # The GET should preserve any referer - get make_friend_path(friend), :params => { :referer => "/test" } - 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 Friendship.where(:befriender => user, :befriendee => friend).first - - # When logged in a POST should add the friendship and refer us - assert_difference "ActionMailer::Base.deliveries.size", 1 do - perform_enqueued_jobs do - post make_friend_path(friend), :params => { :referer => "/test" } - end - end - assert_redirected_to "/test" - assert_match(/is now your friend/, flash[:notice]) - assert Friendship.where(:befriender => user, :befriendee => friend).first - email = ActionMailer::Base.deliveries.first - assert_equal 1, email.to.count - assert_equal friend.email, email.to.first - ActionMailer::Base.deliveries.clear - end - - def test_make_friend_unkown_user - # Should error when a bogus user is specified - session_for(create(:user)) - get make_friend_path(:display_name => "No Such User") - assert_response :not_found - assert_template :no_such_user - end - - def test_remove_friend - # Get users to work with - user = create(:user) - friend = create(:user) - create(:friendship, :befriender => user, :befriendee => friend) - - # Check that the users are friends - assert Friendship.where(:befriender => user, :befriendee => friend).first - - # When not logged in a GET should ask us to login - get remove_friend_path(friend) - assert_redirected_to :action => "login", :referer => remove_friend_path(:display_name => friend.display_name) - - # When not logged in a POST should error - post remove_friend_path, :params => { :display_name => friend.display_name } - assert_response :forbidden - assert Friendship.where(:befriender => user, :befriendee => friend).first - - session_for(user) - - # When logged in a GET should get a confirmation page - get remove_friend_path(friend) - 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 Friendship.where(:befriender => user, :befriendee => friend).first - - # When logged in a POST should remove the friendship - post remove_friend_path(friend) - assert_redirected_to user_path(friend) - assert_match(/was removed from your friends/, flash[:notice]) - assert_nil Friendship.where(:befriender => user, :befriendee => friend).first - - # A second POST should report that the friendship does not exist - post remove_friend_path(friend) - assert_redirected_to user_path(friend) - assert_match(/is not one of your friends/, flash[:error]) - assert_nil Friendship.where(:befriender => user, :befriendee => friend).first - end - - def test_remove_friend_with_referer - # Get users to work with - user = create(:user) - friend = create(:user) - create(:friendship, :befriender => user, :befriendee => friend) - session_for(user) - - # Check that the users are friends - assert Friendship.where(:befriender => user, :befriendee => friend).first - - # The GET should preserve any referer - get remove_friend_path(friend), :params => { :referer => "/test" } - 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 Friendship.where(:befriender => user, :befriendee => friend).first - - # When logged in a POST should remove the friendship and refer - post remove_friend_path(friend), :params => { :referer => "/test" } - assert_redirected_to "/test" - assert_match(/was removed from your friends/, flash[:notice]) - assert_nil Friendship.where(:befriender => user, :befriendee => friend).first - end - - def test_remove_friend_unkown_user - # Should error when a bogus user is specified - session_for(create(:user)) - get remove_friend_path(:display_name => "No Such User") - assert_response :not_found - assert_template :no_such_user - end - def test_set_status user = create(:user)