about summary refs log tree commit diff
path: root/spec/workers/scheduler/follow_recommendations_scheduler_spec.rb
blob: 18d5260e426f8c3d0856715bf80fab5ffd6e3596 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# frozen_string_literal: true

require 'rails_helper'

describe Scheduler::FollowRecommendationsScheduler do
  let!(:target_accounts) do
    Fabricate.times(3, :account) do
      statuses(count: 6)
    end
  end
  let!(:follower_accounts) do
    Fabricate.times(5, :account) do
      statuses(count: 6)
    end
  end

  describe '#perform' do
    subject(:scheduled_run) { described_class.new.perform }

    context 'when there are accounts to recommend' do
      before do
        # Follow the target accounts by follow accounts to make them recommendable
        follower_accounts.each do |follower_account|
          target_accounts.each do |target_account|
            Fabricate(:follow, account: follower_account, target_account: target_account)
          end
        end
      end

      it 'creates recommendations' do
        expect { scheduled_run }.to change(FollowRecommendation, :count).from(0).to(target_accounts.size)
        expect(redis.zrange('follow_recommendations:en', 0, -1)).to match_array(target_accounts.pluck(:id).map(&:to_s))
      end
    end

    context 'when there are no accounts to recommend' do
      it 'does not create follow recommendations' do
        expect { scheduled_run }.to_not change(FollowRecommendation, :count)
        expect(redis.zrange('follow_recommendations:en', 0, -1)).to be_empty
      end
    end
  end
end