Fix #3822: Move favorites (while deleting) fails if user has also favorited destination
This commit is contained in:
@@ -966,6 +966,13 @@ class Post < ApplicationRecord
|
|||||||
clean_fav_string! if clean_fav_string?
|
clean_fav_string! if clean_fav_string?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_favorite(user)
|
||||||
|
add_favorite!(user)
|
||||||
|
true
|
||||||
|
rescue Favorite::Error
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
def add_favorite!(user)
|
def add_favorite!(user)
|
||||||
Favorite.add(post: self, user: user)
|
Favorite.add(post: self, user: user)
|
||||||
vote!("up", user) if user.is_voter?
|
vote!("up", user) if user.is_voter?
|
||||||
@@ -1295,7 +1302,7 @@ class Post < ApplicationRecord
|
|||||||
transaction do
|
transaction do
|
||||||
favorites.each do |fav|
|
favorites.each do |fav|
|
||||||
remove_favorite!(fav.user)
|
remove_favorite!(fav.user)
|
||||||
parent.add_favorite!(fav.user)
|
parent.add_favorite(fav.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
should "decrement the user's favorite count" do
|
should "decrement the user's favorite count" do
|
||||||
@post.add_favorite!(@post.uploader)
|
|
||||||
assert_difference(["@post.uploader.reload.favorite_count"], -1) do
|
assert_difference(["@post.uploader.reload.favorite_count"], -1) do
|
||||||
@post.expunge!
|
@post.expunge!
|
||||||
end
|
end
|
||||||
@@ -1720,13 +1719,13 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
assert_equal(0, @post.score)
|
assert_equal(0, @post.score)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "update the fav strings ont he post" do
|
should "update the fav strings on the post" do
|
||||||
@post.add_favorite!(@user)
|
@post.add_favorite!(@user)
|
||||||
@post.reload
|
@post.reload
|
||||||
assert_equal("fav:#{@user.id}", @post.fav_string)
|
assert_equal("fav:#{@user.id}", @post.fav_string)
|
||||||
assert(Favorite.exists?(:user_id => @user.id, :post_id => @post.id))
|
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
|
@post.reload
|
||||||
assert_equal("fav:#{@user.id}", @post.fav_string)
|
assert_equal("fav:#{@user.id}", @post.fav_string)
|
||||||
assert(Favorite.exists?(:user_id => @user.id, :post_id => @post.id))
|
assert(Favorite.exists?(:user_id => @user.id, :post_id => @post.id))
|
||||||
|
|||||||
Reference in New Issue
Block a user