Actually filter blocked reblogs from feed

And even a relevant test. Whoops.
This commit is contained in:
aschmitz 2017-11-11 22:10:49 -06:00
parent 48c705bbad
commit 9a42f7cbed
2 changed files with 10 additions and 1 deletions

View file

@ -160,7 +160,9 @@ class FeedManager
should_filter &&= status.account_id != status.in_reply_to_account_id # and it's not a self-reply should_filter &&= status.account_id != status.in_reply_to_account_id # and it's not a self-reply
return should_filter return should_filter
elsif status.reblog? # Filter out a reblog elsif status.reblog? # Filter out a reblog
should_filter = Block.where(account_id: status.reblog.account_id, target_account_id: receiver_id).exists? # or if the author of the reblogged status is blocking me src_id = status.account_id
should_filter = Follow.where(account_id: receiver_id, target_account_id: src_id, show_reblogs: false).exists? # if the reblogger's reblogs are suppressed
should_filter ||= Block.where(account_id: status.reblog.account_id, target_account_id: receiver_id).exists? # or if the author of the reblogged status is blocking me
should_filter ||= AccountDomainBlock.where(account_id: receiver_id, domain: status.reblog.account.domain).exists? # or the author's domain is blocked should_filter ||= AccountDomainBlock.where(account_id: receiver_id, domain: status.reblog.account.domain).exists? # or the author's domain is blocked
return should_filter return should_filter
end end

View file

@ -56,6 +56,13 @@ RSpec.describe FeedManager do
expect(FeedManager.instance.filter?(:home, reblog, bob.id)).to be true expect(FeedManager.instance.filter?(:home, reblog, bob.id)).to be true
end end
it 'returns true for reblog from account with reblogs disabled' do
status = Fabricate(:status, text: 'Hello world', account: jeff)
reblog = Fabricate(:status, reblog: status, account: alice)
bob.follow!(alice, reblogs: false)
expect(FeedManager.instance.filter?(:home, reblog, bob.id)).to be true
end
it 'returns false for reply by followee to another followee' do it 'returns false for reply by followee to another followee' do
status = Fabricate(:status, text: 'Hello world', account: jeff) status = Fabricate(:status, text: 'Hello world', account: jeff)
reply = Fabricate(:status, text: 'Nay', thread: status, account: alice) reply = Fabricate(:status, text: 'Nay', thread: status, account: alice)