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
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