Skip to content

Commit

Permalink
Fix when unfollow a tag, my post also disappears from the home timeli…
Browse files Browse the repository at this point in the history
  • Loading branch information
kmycode committed Oct 13, 2023
1 parent 243e141 commit f5bd91e
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions app/lib/feed_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ def unmerge_tag_from_home(from_tag, into_account)
# also tagged with another followed hashtag or from a followed user
scope = from_tag.statuses
.where(id: timeline_status_ids)
.where.not(account: into_account)
.where.not(account: into_account.following)
.tagged_with_none(TagFollow.where(account: into_account).pluck(:tag_id))

Expand Down
38 changes: 38 additions & 0 deletions spec/lib/feed_manager_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,44 @@
end
end

describe '#unmerge_tag_from_home' do
let(:receiver) { Fabricate(:account) }
let(:tag) { Fabricate(:tag) }

it 'leaves a tagged status' do
status = Fabricate(:status)
status.tags << tag
described_class.instance.push_to_home(receiver, status)

described_class.instance.unmerge_tag_from_home(tag, receiver)

expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to_not include(status.id.to_s)
end

it 'remains a tagged status written by receiver\'s followee' do
followee = Fabricate(:account)
receiver.follow!(followee)

status = Fabricate(:status, account: followee)
status.tags << tag
described_class.instance.push_to_home(receiver, status)

described_class.instance.unmerge_tag_from_home(tag, receiver)

expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s)
end

it 'remains a tagged status written by receiver' do
status = Fabricate(:status, account: receiver)
status.tags << tag
described_class.instance.push_to_home(receiver, status)

described_class.instance.unmerge_tag_from_home(tag, receiver)

expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s)
end
end

describe '#clear_from_home' do
let(:account) { Fabricate(:account) }
let(:followed_account) { Fabricate(:account) }
Expand Down

0 comments on commit f5bd91e

Please sign in to comment.