chinwagsocial/spec/models/home_feed_spec.rb
Eugen Rochko f665901e3c
Fix performance of home feed regeneration ()
Fetching statuses from all followed accounts at once takes too long
within Postgres. Fetching them one by one and merging in Ruby
could be a lot less resource-intensive

Because the query for dynamically fetching the home timeline is so
heavy, we can no longer offer it when the home timeline is missing
2019-10-06 22:11:17 +02:00

44 lines
1.1 KiB
Ruby

require 'rails_helper'
RSpec.describe HomeFeed, type: :model do
let(:account) { 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)
end
context 'when feed is generated' do
before do
Redis.current.zadd(
FeedManager.instance.key(:home, account.id),
[[4, 4], [3, 3], [2, 2], [1, 1]]
)
end
it 'gets statuses with ids in the range from redis' do
results = subject.get(3)
expect(results.map(&:id)).to eq [3, 2]
expect(results.first.attributes.keys).to eq %w(id updated_at)
end
end
context 'when feed is being generated' do
before do
Redis.current.set("account:#{account.id}:regeneration", true)
end
it 'returns nothing' do
results = subject.get(3)
expect(results.map(&:id)).to eq []
end
end
end
end