diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 3b16b5d52..414632a8a 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -173,10 +173,14 @@ class FeedManager def keyword_filter?(status, matcher) should_filter = matcher =~ status.text should_filter ||= matcher =~ status.spoiler_text + should_filter ||= status.tags.find_each.any? { |t| matcher =~ t.name } if status.reblog? - should_filter ||= matcher =~ status.reblog.text - should_filter ||= matcher =~ status.reblog.spoiler_text + reblog = status.reblog + + should_filter ||= matcher =~ reblog.text + should_filter ||= matcher =~ reblog.spoiler_text + should_filter ||= reblog.tags.find_each.any? { |t| matcher =~ t.name } end !!should_filter diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 715d85306..0e4968440 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -164,6 +164,22 @@ RSpec.describe FeedManager do expect(FeedManager.instance.filter?(:home, reblog, alice.id)).to be true end + + it 'returns true for a status with a tag that matches a muted keyword' do + Fabricate('Glitch::KeywordMute', account: alice, keyword: 'jorts') + status = Fabricate(:status, account: bob) + status.tags << Fabricate(:tag, name: 'jorts') + + expect(FeedManager.instance.filter?(:home, status, alice.id)).to be true + end + + it 'returns true for a status with a tag that matches an octothorpe-prefixed muted keyword' do + Fabricate('Glitch::KeywordMute', account: alice, keyword: '#jorts') + status = Fabricate(:status, account: bob) + status.tags << Fabricate(:tag, name: 'jorts') + + expect(FeedManager.instance.filter?(:home, status, alice.id)).to be true + end end context 'for mentions feed' do