Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't stub SUT in FollowLimitValidator spec #27760

Merged
merged 2 commits into from
Nov 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion spec/validators/blacklisted_email_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require 'rails_helper'

RSpec.describe BlacklistedEmailValidator, type: :validator do
RSpec.describe BlacklistedEmailValidator do
describe '#validate' do
subject { described_class.new.validate(user); errors }

Expand Down
2 changes: 1 addition & 1 deletion spec/validators/disallowed_hashtags_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require 'rails_helper'

RSpec.describe DisallowedHashtagsValidator, type: :validator do
RSpec.describe DisallowedHashtagsValidator do
let(:disallowed_tags) { [] }

describe '#validate' do
Expand Down
82 changes: 55 additions & 27 deletions spec/validators/follow_limit_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,76 @@

require 'rails_helper'

RSpec.describe FollowLimitValidator, type: :validator do
RSpec.describe FollowLimitValidator do
describe '#validate' do
before do
allow_any_instance_of(described_class).to receive(:limit_reached?).with(account) do
limit_reached
end
context 'with a nil account' do
it 'does not add validation errors to base' do
follow = Fabricate.build(:follow, account: nil)

follow.valid?

described_class.new.validate(follow)
expect(follow.errors[:base]).to be_empty
end
end

let(:follow) { instance_double(Follow, account: account, errors: errors) }
let(:errors) { instance_double(ActiveModel::Errors, add: nil) }
let(:account) { instance_double(Account, nil?: _nil, local?: local, following_count: 0, followers_count: 0) }
let(:_nil) { true }
let(:local) { false }
context 'with a non-local account' do
it 'does not add validation errors to base' do
follow = Fabricate.build(:follow, account: Account.new(domain: 'host.example'))

context 'with follow.account.nil? || !follow.account.local?' do
let(:_nil) { true }
follow.valid?

it 'not calls errors.add' do
expect(errors).to_not have_received(:add).with(:base, any_args)
expect(follow.errors[:base]).to be_empty
end
end

context 'with !(follow.account.nil? || !follow.account.local?)' do
let(:_nil) { false }
let(:local) { true }
context 'with a local account' do
let(:account) { Account.new }

context 'when the followers count is under the limit' do
before do
allow(account).to receive(:following_count).and_return(described_class::LIMIT - 100)
end

it 'does not add validation errors to base' do
follow = Fabricate.build(:follow, account: account)

context 'when limit_reached?' do
let(:limit_reached) { true }
follow.valid?

it 'calls errors.add' do
expect(errors).to have_received(:add)
.with(:base, I18n.t('users.follow_limit_reached', limit: FollowLimitValidator::LIMIT))
expect(follow.errors[:base]).to be_empty
end
end

context 'with !limit_reached?' do
let(:limit_reached) { false }
context 'when the following count is over the limit' do
before do
allow(account).to receive(:following_count).and_return(described_class::LIMIT + 100)
end

context 'when the followers count is low' do
before do
allow(account).to receive(:followers_count).and_return(10)
end

it 'adds validation errors to base' do
follow = Fabricate.build(:follow, account: account)

follow.valid?

expect(follow.errors[:base]).to include(I18n.t('users.follow_limit_reached', limit: FollowLimitValidator::LIMIT))
end
end

context 'when the followers count is high' do
before do
allow(account).to receive(:followers_count).and_return(100_000)
end

it 'does not add validation errors to base' do
follow = Fabricate.build(:follow, account: account)

follow.valid?

it 'not calls errors.add' do
expect(errors).to_not have_received(:add).with(:base, any_args)
expect(follow.errors[:base]).to be_empty
end
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion spec/validators/poll_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require 'rails_helper'

RSpec.describe PollValidator, type: :validator do
RSpec.describe PollValidator do
describe '#validate' do
before do
validator.validate(poll)
Expand Down
2 changes: 1 addition & 1 deletion spec/validators/status_pin_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require 'rails_helper'

RSpec.describe StatusPinValidator, type: :validator do
RSpec.describe StatusPinValidator do
describe '#validate' do
before do
subject.validate(pin)
Expand Down