about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2017-10-14 02:28:20 -0500
committerDavid Yip <yipdw@member.fsf.org>2017-10-21 14:54:21 -0500
commit4745d6eeca3a422f41775ee5f31989fc036da7d6 (patch)
tree4c04ca2eca3f03d20d51374d2c37b12f8bb6962a
parent9093e2de7a133470eec1049a13465f81928d0119 (diff)
Spec out KeywordMute interface. #164.
-rw-r--r--app/lib/feed_manager.rb2
-rw-r--r--app/models/keyword_mute.rb2
-rw-r--r--spec/models/keyword_mute_spec.rb18
3 files changed, 21 insertions, 1 deletions
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index ca15745cb..baaa09e86 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -138,6 +138,8 @@ class FeedManager
   end
 
   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 true  if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)
 
diff --git a/app/models/keyword_mute.rb b/app/models/keyword_mute.rb
index 91816eed9..d397a1f41 100644
--- a/app/models/keyword_mute.rb
+++ b/app/models/keyword_mute.rb
@@ -10,4 +10,6 @@
 #
 
 class KeywordMute < ApplicationRecord
+  def self.matches?(text)
+  end
 end
diff --git a/spec/models/keyword_mute_spec.rb b/spec/models/keyword_mute_spec.rb
index cd0881565..cb6e554e4 100644
--- a/spec/models/keyword_mute_spec.rb
+++ b/spec/models/keyword_mute_spec.rb
@@ -1,5 +1,21 @@
 require 'rails_helper'
 
 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