summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Jankowski <matt@jankowski.online>2023-11-08 07:49:46 -0500
committerGitHub <noreply@github.com>2023-11-08 12:49:46 +0000
commitc03bd2a238741a012aa4b98dc4902d6cf948ab63 (patch)
tree61c233f11930d0bfb2ee73080aa3ee580c5fad7d
parent5c328ae674f9df14c2766c74ca276a3c55c2dc4e (diff)
Don't stub SUT in `FollowLimitValidator` spec (#27760)
-rw-r--r--spec/validators/blacklisted_email_validator_spec.rb2
-rw-r--r--spec/validators/disallowed_hashtags_validator_spec.rb2
-rw-r--r--spec/validators/follow_limit_validator_spec.rb82
-rw-r--r--spec/validators/poll_validator_spec.rb2
-rw-r--r--spec/validators/status_pin_validator_spec.rb2
5 files changed, 59 insertions, 31 deletions
diff --git a/spec/validators/blacklisted_email_validator_spec.rb b/spec/validators/blacklisted_email_validator_spec.rb
index bfe2a11a999..6292f0737ed 100644
--- a/spec/validators/blacklisted_email_validator_spec.rb
+++ b/spec/validators/blacklisted_email_validator_spec.rb
@@ -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 }
diff --git a/spec/validators/disallowed_hashtags_validator_spec.rb b/spec/validators/disallowed_hashtags_validator_spec.rb
index 7144d289188..570ddb31c20 100644
--- a/spec/validators/disallowed_hashtags_validator_spec.rb
+++ b/spec/validators/disallowed_hashtags_validator_spec.rb
@@ -2,7 +2,7 @@
require 'rails_helper'
-RSpec.describe DisallowedHashtagsValidator, type: :validator do
+RSpec.describe DisallowedHashtagsValidator do
let(:disallowed_tags) { [] }
describe '#validate' do
diff --git a/spec/validators/follow_limit_validator_spec.rb b/spec/validators/follow_limit_validator_spec.rb
index 86b6511d655..51b0683d270 100644
--- a/spec/validators/follow_limit_validator_spec.rb
+++ b/spec/validators/follow_limit_validator_spec.rb
@@ -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
diff --git a/spec/validators/poll_validator_spec.rb b/spec/validators/poll_validator_spec.rb
index 95feb043dbb..f2a2534898d 100644
--- a/spec/validators/poll_validator_spec.rb
+++ b/spec/validators/poll_validator_spec.rb
@@ -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)
diff --git a/spec/validators/status_pin_validator_spec.rb b/spec/validators/status_pin_validator_spec.rb
index e8f8a454348..d5109f990fb 100644
--- a/spec/validators/status_pin_validator_spec.rb
+++ b/spec/validators/status_pin_validator_spec.rb
@@ -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)