123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- # frozen_string_literal: true
- require 'rails_helper'
- RSpec.describe Follow do
- describe 'Associations' do
- it { is_expected.to belong_to(:account).required }
- it { is_expected.to belong_to(:target_account).required }
- end
- describe 'Validations' do
- subject { Fabricate.build :follow, rate_limit: true }
- let(:account) { Fabricate(:account) }
- context 'when account follows too many people' do
- before { account.update(following_count: FollowLimitValidator::LIMIT) }
- it { is_expected.to_not allow_value(account).for(:account).against(:base) }
- end
- context 'when account is on brink of following too many people' do
- before { account.update(following_count: FollowLimitValidator::LIMIT - 1) }
- it { is_expected.to allow_value(account).for(:account).against(:base) }
- end
- end
- describe '.recent' do
- let!(:follow_earlier) { Fabricate(:follow) }
- let!(:follow_later) { Fabricate(:follow) }
- it 'sorts with most recent follows first' do
- results = described_class.recent
- expect(results.size).to eq 2
- expect(results).to eq [follow_later, follow_earlier]
- end
- end
- describe 'revoke_request!' do
- let(:follow) { Fabricate(:follow, account: account, target_account: target_account) }
- let(:account) { Fabricate(:account) }
- let(:target_account) { Fabricate(:account) }
- it 'revokes the follow relation' do
- follow.revoke_request!
- expect(account.following?(target_account)).to be false
- end
- it 'creates a follow request' do
- follow.revoke_request!
- expect(account.requested?(target_account)).to be true
- end
- end
- describe '#local?' do
- it { is_expected.to_not be_local }
- end
- describe 'Callbacks' do
- describe 'Setting a URI' do
- context 'when URI exists' do
- subject { Fabricate.build :follow, uri: 'https://uri/value' }
- it 'does not change' do
- expect { subject.save }
- .to not_change(subject, :uri)
- end
- end
- context 'when URI is blank' do
- subject { Fabricate.build :follow, uri: nil }
- it 'populates the value' do
- expect { subject.save }
- .to change(subject, :uri).to(be_present)
- end
- end
- end
- describe 'Maintaining counters' do
- subject { Fabricate.build :follow, account:, target_account: }
- let(:account) { Fabricate :account }
- let(:target_account) { Fabricate :account }
- before do
- account.account_stat.update following_count: 123
- target_account.account_stat.update followers_count: 123
- end
- describe 'saving the follow' do
- it 'increments counters' do
- expect { subject.save }
- .to change(account, :following_count).by(1)
- .and(change(target_account, :followers_count).by(1))
- end
- end
- describe 'destroying the follow' do
- it 'decrements counters' do
- expect { subject.destroy }
- .to change(account, :following_count).by(-1)
- .and(change(target_account, :followers_count).by(-1))
- end
- end
- end
- end
- end
|