From c504ad555de50a9cd687a805eba0fe029fccf783 Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 19 Aug 2018 00:54:17 -0500 Subject: [PATCH] Fix #3822: Move favorites (while deleting) fails if user has also favorited destination --- app/models/post.rb | 9 ++++++++- test/unit/post_test.rb | 5 ++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index aac8d514c..57f280839 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -966,6 +966,13 @@ class Post < ApplicationRecord clean_fav_string! if clean_fav_string? end + def add_favorite(user) + add_favorite!(user) + true + rescue Favorite::Error + false + end + def add_favorite!(user) Favorite.add(post: self, user: user) vote!("up", user) if user.is_voter? @@ -1295,7 +1302,7 @@ class Post < ApplicationRecord transaction do favorites.each do |fav| remove_favorite!(fav.user) - parent.add_favorite!(fav.user) + parent.add_favorite(fav.user) end end diff --git a/test/unit/post_test.rb b/test/unit/post_test.rb index 1476ec631..4fa6cd847 100644 --- a/test/unit/post_test.rb +++ b/test/unit/post_test.rb @@ -68,7 +68,6 @@ class PostTest < ActiveSupport::TestCase end should "decrement the user's favorite count" do - @post.add_favorite!(@post.uploader) assert_difference(["@post.uploader.reload.favorite_count"], -1) do @post.expunge! end @@ -1720,13 +1719,13 @@ class PostTest < ActiveSupport::TestCase assert_equal(0, @post.score) end - should "update the fav strings ont he post" do + should "update the fav strings on the post" do @post.add_favorite!(@user) @post.reload assert_equal("fav:#{@user.id}", @post.fav_string) assert(Favorite.exists?(:user_id => @user.id, :post_id => @post.id)) - @post.add_favorite!(@user) + assert_raises(Favorite::Error) { @post.add_favorite!(@user) } @post.reload assert_equal("fav:#{@user.id}", @post.fav_string) assert(Favorite.exists?(:user_id => @user.id, :post_id => @post.id))