FIX: Liking whispers should not contribute to `Topic#like_count`. (#15703)
Non-staff users are not allowed to see whisper so this change prevents
non-staff user from seeing a like count that does not make sense to
them. In the future, we might consider adding another like count column
for staff user.
Follow-up to 4492718864
This commit is contained in:
parent
16910eba1d
commit
4aa9a813ec
|
@ -239,8 +239,7 @@ class PostAction < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
if column == "like_count"
|
if column == "like_count"
|
||||||
topic_count = Post.where(topic_id: topic_id).sum(column)
|
Topic.find_by(id: topic_id)&.update_action_counts
|
||||||
Topic.where(id: topic_id).update_all ["#{column} = ?", topic_count]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class FixTopicLikeCountIncludingWhispers < ActiveRecord::Migration[6.0]
|
||||||
|
def up
|
||||||
|
whisper_post_type = 4
|
||||||
|
|
||||||
|
DB.exec(<<~SQL)
|
||||||
|
UPDATE topics SET like_count = tbl.like_count
|
||||||
|
FROM (
|
||||||
|
SELECT topic_id, SUM(like_count) like_count
|
||||||
|
FROM posts
|
||||||
|
WHERE deleted_at IS NULL
|
||||||
|
AND post_type <> #{whisper_post_type}
|
||||||
|
GROUP BY topic_id
|
||||||
|
) AS tbl
|
||||||
|
WHERE topics.id = tbl.topic_id
|
||||||
|
AND topics.like_count <> tbl.like_count
|
||||||
|
SQL
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
raise ActiveRecord::IrreversibleMigration
|
||||||
|
end
|
||||||
|
end
|
|
@ -456,6 +456,16 @@ describe PostAction do
|
||||||
expect(notification.notification_type).to eq(Notification.types[:liked])
|
expect(notification.notification_type).to eq(Notification.types[:liked])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should not increase topic like count when liking a whisper' do
|
||||||
|
SiteSetting.set(:enable_whispers, true)
|
||||||
|
post.revise(admin, post_type: Post.types[:whisper])
|
||||||
|
|
||||||
|
PostActionCreator.like(admin, post)
|
||||||
|
|
||||||
|
expect(post.reload.like_count).to eq(1)
|
||||||
|
expect(post.topic.like_count).to eq(0)
|
||||||
|
end
|
||||||
|
|
||||||
it 'should increase the `like_count` and `like_score` when a user likes something' do
|
it 'should increase the `like_count` and `like_score` when a user likes something' do
|
||||||
freeze_time Date.today
|
freeze_time Date.today
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue