Fix notifications from limited users being outright dropped (#30559)
This commit is contained in:
parent
a5a1584675
commit
bf56e982a9
3 changed files with 33 additions and 7 deletions
|
@ -420,10 +420,7 @@ class FeedManager
|
||||||
check_for_blocks = status.active_mentions.pluck(:account_id)
|
check_for_blocks = status.active_mentions.pluck(:account_id)
|
||||||
check_for_blocks.push(status.in_reply_to_account) if status.reply? && !status.in_reply_to_account_id.nil?
|
check_for_blocks.push(status.in_reply_to_account) if status.reply? && !status.in_reply_to_account_id.nil?
|
||||||
|
|
||||||
should_filter = blocks_or_mutes?(receiver_id, check_for_blocks, :mentions) # Filter if it's from someone I blocked, in reply to someone I blocked, or mentioning someone I blocked (or muted)
|
blocks_or_mutes?(receiver_id, check_for_blocks, :mentions) # Filter if it's from someone I blocked, in reply to someone I blocked, or mentioning someone I blocked (or muted)
|
||||||
should_filter ||= status.account.silenced? && !Follow.exists?(account_id: receiver_id, target_account_id: status.account_id) # Filter if the account is silenced and I'm not following them
|
|
||||||
|
|
||||||
should_filter
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Check if status should not be added to the list feed
|
# Check if status should not be added to the list feed
|
||||||
|
|
|
@ -206,13 +206,13 @@ RSpec.describe FeedManager do
|
||||||
expect(described_class.instance.filter?(:mentions, reply, bob)).to be true
|
expect(described_class.instance.filter?(:mentions, reply, bob)).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true for status by silenced account who recipient is not following' do
|
it 'returns false for status by limited account who recipient is not following' do
|
||||||
status = Fabricate(:status, text: 'Hello world', account: alice)
|
status = Fabricate(:status, text: 'Hello world', account: alice)
|
||||||
alice.silence!
|
alice.silence!
|
||||||
expect(described_class.instance.filter?(:mentions, status, bob)).to be true
|
expect(described_class.instance.filter?(:mentions, status, bob)).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false for status by followed silenced account' do
|
it 'returns false for status by followed limited account' do
|
||||||
status = Fabricate(:status, text: 'Hello world', account: alice)
|
status = Fabricate(:status, text: 'Hello world', account: alice)
|
||||||
alice.silence!
|
alice.silence!
|
||||||
bob.follow!(alice)
|
bob.follow!(alice)
|
||||||
|
|
|
@ -129,6 +129,35 @@ RSpec.describe NotifyService do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe NotifyService::DismissCondition do
|
||||||
|
subject { described_class.new(notification) }
|
||||||
|
|
||||||
|
let(:activity) { Fabricate(:mention, status: Fabricate(:status)) }
|
||||||
|
let(:notification) { Fabricate(:notification, type: :mention, activity: activity, from_account: activity.status.account, account: activity.account) }
|
||||||
|
|
||||||
|
describe '#dismiss?' do
|
||||||
|
context 'when sender is silenced' do
|
||||||
|
before do
|
||||||
|
notification.from_account.silence!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false' do
|
||||||
|
expect(subject.dismiss?).to be false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when recipient has blocked sender' do
|
||||||
|
before do
|
||||||
|
notification.account.block!(notification.from_account)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns true' do
|
||||||
|
expect(subject.dismiss?).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe NotifyService::FilterCondition do
|
describe NotifyService::FilterCondition do
|
||||||
subject { described_class.new(notification) }
|
subject { described_class.new(notification) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue