diff options
Diffstat (limited to 'spec/models')
-rw-r--r-- | spec/models/home_feed_spec.rb | 73 |
1 files changed, 64 insertions, 9 deletions
diff --git a/spec/models/home_feed_spec.rb b/spec/models/home_feed_spec.rb index 179459e53..565357d7b 100644 --- a/spec/models/home_feed_spec.rb +++ b/spec/models/home_feed_spec.rb @@ -1,33 +1,83 @@ require 'rails_helper' RSpec.describe HomeFeed, type: :model do - let(:account) { Fabricate(:account) } + let(:account) { Fabricate(:account) } + let(:followed) { Fabricate(:account) } + let(:other) { Fabricate(:account) } subject { described_class.new(account) } describe '#get' do before do - Fabricate(:status, account: account, id: 1) - Fabricate(:status, account: account, id: 2) - Fabricate(:status, account: account, id: 3) - Fabricate(:status, account: account, id: 10) + account.follow!(followed) + + Fabricate(:status, account: account, id: 1) + Fabricate(:status, account: account, id: 2) + status = Fabricate(:status, account: followed, id: 3) + Fabricate(:mention, account: account, status: status) + Fabricate(:status, account: account, id: 10) + Fabricate(:status, account: other, id: 11) + Fabricate(:status, account: followed, id: 12, visibility: :private) + Fabricate(:status, account: followed, id: 13, visibility: :direct) + Fabricate(:status, account: account, id: 14, visibility: :direct) + dm = Fabricate(:status, account: followed, id: 15, visibility: :direct) + Fabricate(:mention, account: account, status: dm) end context 'when feed is generated' do before do + FeedManager.instance.populate_home(account) + + # Add direct messages because populate_home does not do that Redis.current.zadd( FeedManager.instance.key(:home, account.id), - [[4, 4], [3, 3], [2, 2], [1, 1]] + [[14, 14], [15, 15]] ) end it 'gets statuses with ids in the range from redis with database' do - results = subject.get(3) + results = subject.get(5) + + expect(results.map(&:id)).to eq [15, 14, 12, 10, 3] + expect(results.first.attributes.keys).to eq %w(id updated_at) + end + + it 'with since_id present' do + results = subject.get(5, nil, 3, nil) + expect(results.map(&:id)).to eq [15, 14, 12, 10] + end + it 'with min_id present' do + results = subject.get(3, nil, nil, 0) expect(results.map(&:id)).to eq [3, 2, 1] + end + end + + context 'when feed is only partial' do + before do + FeedManager.instance.populate_home(account) + + # Add direct messages because populate_home does not do that + Redis.current.zadd( + FeedManager.instance.key(:home, account.id), + [[14, 14], [15, 15]] + ) + + Redis.current.zremrangebyrank(FeedManager.instance.key(:home, account.id), 0, -2) + end + + it 'gets statuses with ids in the range from redis with database' do + results = subject.get(5) + + expect(results.map(&:id)).to eq [15, 14, 12, 10, 3] expect(results.first.attributes.keys).to eq %w(id updated_at) end + it 'with since_id present' do + results = subject.get(5, nil, 3, nil) + expect(results.map(&:id)).to eq [15, 14, 12, 10] + end + it 'with min_id present' do results = subject.get(3, nil, nil, 0) expect(results.map(&:id)).to eq [3, 2, 1] @@ -40,9 +90,14 @@ RSpec.describe HomeFeed, type: :model do end it 'returns from database' do - results = subject.get(3) + results = subject.get(5) + + expect(results.map(&:id)).to eq [15, 14, 12, 10, 3] + end - expect(results.map(&:id)).to eq [10, 3, 2] + it 'with since_id present' do + results = subject.get(5, nil, 3, nil) + expect(results.map(&:id)).to eq [15, 14, 12, 10] end it 'with min_id present' do |