about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAkihiko Odaki (@fn_aki@pawoo.net) <akihiko.odaki.4i@stu.hosei.ac.jp>2017-07-11 08:00:01 +0900
committerEugen Rochko <eugen@zeonfederated.com>2017-07-11 01:00:01 +0200
commit7bacdd718a143f54f47ddc3afa39504636be65c0 (patch)
treeb8e80020a816e329f52cb1325b48c1fe455bdace
parent958fe0f7db6702d65791def89fceef77d6f43589 (diff)
Fix PrecomputeFeedService for filtered statuses (#4148)
-rw-r--r--app/services/precompute_feed_service.rb4
-rw-r--r--spec/services/precompute_feed_service_spec.rb12
2 files changed, 14 insertions, 2 deletions
diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb
index a32ba1dae..85635a008 100644
--- a/app/services/precompute_feed_service.rb
+++ b/app/services/precompute_feed_service.rb
@@ -13,7 +13,7 @@ class PrecomputeFeedService < BaseService
   attr_reader :account
 
   def populate_feed
-    pairs = statuses.reverse_each.map(&method(:process_status))
+    pairs = statuses.reverse_each.lazy.reject(&method(:status_filtered?)).map(&method(:process_status)).to_a
 
     redis.pipelined do
       redis.zadd(account_home_key, pairs) if pairs.any?
@@ -22,7 +22,7 @@ class PrecomputeFeedService < BaseService
   end
 
   def process_status(status)
-    [status.id, status.reblog? ? status.reblog_of_id : status.id] unless status_filtered?(status)
+    [status.id, status.reblog? ? status.reblog_of_id : status.id]
   end
 
   def status_filtered?(status)
diff --git a/spec/services/precompute_feed_service_spec.rb b/spec/services/precompute_feed_service_spec.rb
index e2294469c..dbd08ac1b 100644
--- a/spec/services/precompute_feed_service_spec.rb
+++ b/spec/services/precompute_feed_service_spec.rb
@@ -23,5 +23,17 @@ RSpec.describe PrecomputeFeedService do
       account = Fabricate(:account)
       subject.call(account)
     end
+
+    it 'filters statuses' do
+      account = Fabricate(:account)
+      muted_account = Fabricate(:account)
+      Fabricate(:mute, account: account, target_account: muted_account)
+      reblog = Fabricate(:status, account: muted_account)
+      status = Fabricate(:status, account: account, reblog: reblog)
+
+      subject.call(account)
+
+      expect(Redis.current.zscore(FeedManager.instance.key(:home, account.id), reblog.id)).to eq nil
+    end
   end
 end