Prefer find_by() instead of where().first

These are very similar, differing only if we would expect multiple
results and the sorting is important. However, in all our cases
we're only expecting one result to be returned, and so find_by is
easier to read.
This commit is contained in:
Andy Allan 2023-10-04 17:53:58 +01:00
parent c8fc2218e5
commit 1700c23dd1
11 changed files with 44 additions and 41 deletions

View file

@ -28,7 +28,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
friend = create(:user)
# Check that the users aren't already friends
assert_nil Friendship.where(:befriender => user, :befriendee => friend).first
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
# When not logged in a GET should ask us to login
get make_friend_path(friend)
@ -37,7 +37,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
# 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
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
session_for(user)
@ -49,7 +49,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
assert_select "input[type='hidden'][name='referer']", 0
assert_select "input[type='submit']", 1
end
assert_nil Friendship.where(:befriender => user, :befriendee => friend).first
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
# When logged in a POST should add the friendship
assert_difference "ActionMailer::Base.deliveries.size", 1 do
@ -59,7 +59,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
end
assert_redirected_to user_path(friend)
assert_match(/is now your friend/, flash[:notice])
assert Friendship.where(:befriender => user, :befriendee => friend).first
assert Friendship.find_by(:befriender => user, :befriendee => friend)
email = ActionMailer::Base.deliveries.first
assert_equal 1, email.to.count
assert_equal friend.email, email.to.first
@ -73,7 +73,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
end
assert_redirected_to user_path(friend)
assert_match(/You are already friends with/, flash[:warning])
assert Friendship.where(:befriender => user, :befriendee => friend).first
assert Friendship.find_by(:befriender => user, :befriendee => friend)
end
def test_make_friend_with_referer
@ -83,7 +83,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
session_for(user)
# Check that the users aren't already friends
assert_nil Friendship.where(:befriender => user, :befriendee => friend).first
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
# The GET should preserve any referer
get make_friend_path(friend), :params => { :referer => "/test" }
@ -93,7 +93,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
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
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
# When logged in a POST should add the friendship and refer us
assert_difference "ActionMailer::Base.deliveries.size", 1 do
@ -103,7 +103,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
end
assert_redirected_to "/test"
assert_match(/is now your friend/, flash[:notice])
assert Friendship.where(:befriender => user, :befriendee => friend).first
assert Friendship.find_by(:befriender => user, :befriendee => friend)
email = ActionMailer::Base.deliveries.first
assert_equal 1, email.to.count
assert_equal friend.email, email.to.first
@ -125,7 +125,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
create(:friendship, :befriender => user, :befriendee => friend)
# Check that the users are friends
assert Friendship.where(:befriender => user, :befriendee => friend).first
assert Friendship.find_by(:befriender => user, :befriendee => friend)
# When not logged in a GET should ask us to login
get remove_friend_path(friend)
@ -134,7 +134,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
# 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
assert Friendship.find_by(:befriender => user, :befriendee => friend)
session_for(user)
@ -146,19 +146,19 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
assert_select "input[type='hidden'][name='referer']", 0
assert_select "input[type='submit']", 1
end
assert Friendship.where(:befriender => user, :befriendee => friend).first
assert Friendship.find_by(:befriender => user, :befriendee => friend)
# 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
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
# 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
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
end
def test_remove_friend_with_referer
@ -169,7 +169,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
session_for(user)
# Check that the users are friends
assert Friendship.where(:befriender => user, :befriendee => friend).first
assert Friendship.find_by(:befriender => user, :befriendee => friend)
# The GET should preserve any referer
get remove_friend_path(friend), :params => { :referer => "/test" }
@ -179,13 +179,13 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
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
assert Friendship.find_by(:befriender => user, :befriendee => friend)
# 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
assert_nil Friendship.find_by(:befriender => user, :befriendee => friend)
end
def test_remove_friend_unknown_user