Spec out KeywordMute interface. #164.

This commit is contained in:
David Yip 2017-10-14 02:28:20 -05:00
parent 9093e2de7a
commit 4745d6eeca
3 changed files with 21 additions and 1 deletions

View File

@ -138,6 +138,8 @@ class FeedManager
end end
def filter_from_home?(status, receiver_id) def filter_from_home?(status, receiver_id)
return true if KeywordMute.where(account_id: receiver_id).matches?(status.text)
return false if receiver_id == status.account_id return false if receiver_id == status.account_id
return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)

View File

@ -10,4 +10,6 @@
# #
class KeywordMute < ApplicationRecord class KeywordMute < ApplicationRecord
def self.matches?(text)
end
end end

View File

@ -1,5 +1,21 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe KeywordMute, type: :model do RSpec.describe KeywordMute, type: :model do
pending "add some examples to (or delete) #{__FILE__}" describe '.matches?' do
let(:alice) { Fabricate(:account, username: 'alice').tap(&:save!) }
let(:status) { Fabricate(:status, account: alice).tap(&:save!) }
let(:keyword_mute) { Fabricate(:keyword_mute, account: alice, keyword: 'take').tap(&:save!) }
it 'returns true if any keyword in the set matches the status text' do
status.update_attribute(:text, 'This is a hot take')
expect(KeywordMute.where(account: alice).matches?(status.text)).to be_truthy
end
it 'returns false if no keyword in the set matches the status text'
describe 'matching' do
it 'is case-insensitive'
end
end
end end