diff options
author | Akihiko Odaki (@fn_aki@pawoo.net) <akihiko.odaki.4i@stu.hosei.ac.jp> | 2017-06-21 03:41:23 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-06-20 20:41:23 +0200 |
commit | bab5a18232a163b0c3c6a245f7f95d50d7022b36 (patch) | |
tree | ed0445cf66870d2a12827a6a3be06c914878a5d8 /spec/models | |
parent | a20cf3b64e93d764f1dfe88ecdb39f3fd4eefe03 (diff) |
Filter direct statuses in Status.as_home_timeline (#3842)
The classes using Status.as_home_timeline, namely Feed and PrecomputeFeedService are expected to filter direct statuses as FanOutWriteService does, but their filtering were incomplete or missing. This commit solves the problem by filtering direct statuses in as_home_timeline as the other similar methods such as as_public_timeline does.
Diffstat (limited to 'spec/models')
-rw-r--r-- | spec/models/status_spec.rb | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index dd52a5d43..a3ced1abc 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -181,15 +181,18 @@ RSpec.describe Status, type: :model do end describe '.as_home_timeline' do + let(:account) { Fabricate(:account) } + let(:followed) { Fabricate(:account) } + let(:not_followed) { Fabricate(:account) } + before do - account = Fabricate(:account) - followed = Fabricate(:account) - not_followed = Fabricate(:account) Fabricate(:follow, account: account, target_account: followed) - @self_status = Fabricate(:status, account: account) - @followed_status = Fabricate(:status, account: followed) - @not_followed_status = Fabricate(:status, account: not_followed) + @self_status = Fabricate(:status, account: account, visibility: :public) + @self_direct_status = Fabricate(:status, account: account, visibility: :direct) + @followed_status = Fabricate(:status, account: followed, visibility: :public) + @followed_direct_status = Fabricate(:status, account: followed, visibility: :direct) + @not_followed_status = Fabricate(:status, account: not_followed, visibility: :public) @results = Status.as_home_timeline(account) end @@ -198,10 +201,23 @@ RSpec.describe Status, type: :model do expect(@results).to include(@self_status) end + it 'includes direct statuses from self' do + expect(@results).to include(@self_direct_status) + end + it 'includes statuses from followed' do expect(@results).to include(@followed_status) end + it 'includes direct statuses mentioning recipient from followed' do + Fabricate(:mention, account: account, status: @followed_direct_status) + expect(@results).to include(@followed_direct_status) + end + + it 'does not include direct statuses not mentioning recipient from followed' do + expect(@results).not_to include(@followed_direct_status) + end + it 'does not include statuses from non-followed' do expect(@results).not_to include(@not_followed_status) end |