mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 19:43:44 +08:00
FIX: Do not validate email in TL promotion (#20892)
There is no need to validate the user's emails when promoting/demoting their trust level, this can cause issues in things like Jobs::Tl3Promotions, we don't need to fail in that case when all we are doing is changing trust level.
This commit is contained in:
parent
795e6d72a4
commit
84ff96bd07
|
@ -149,7 +149,7 @@ class User < ActiveRecord::Base
|
||||||
validate :name_validator, if: :will_save_change_to_name?
|
validate :name_validator, if: :will_save_change_to_name?
|
||||||
validates :name, user_full_name: true, if: :will_save_change_to_name?, length: { maximum: 255 }
|
validates :name, user_full_name: true, if: :will_save_change_to_name?, length: { maximum: 255 }
|
||||||
validates :ip_address, allowed_ip_address: { on: :create, message: :signup_not_allowed }
|
validates :ip_address, allowed_ip_address: { on: :create, message: :signup_not_allowed }
|
||||||
validates :primary_email, presence: true
|
validates :primary_email, presence: true, unless: :skip_email_validation
|
||||||
validates :validatable_user_fields_values, watched_words: true, unless: :custom_fields_clean?
|
validates :validatable_user_fields_values, watched_words: true, unless: :custom_fields_clean?
|
||||||
validates_associated :primary_email,
|
validates_associated :primary_email,
|
||||||
message: ->(_, user_email) { user_email[:value]&.errors[:email]&.first }
|
message: ->(_, user_email) { user_email[:value]&.errors[:email]&.first }
|
||||||
|
|
|
@ -82,6 +82,7 @@ class Promotion
|
||||||
new_value: new_level,
|
new_value: new_level,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@user.skip_email_validation = true
|
||||||
@user.save!
|
@user.save!
|
||||||
@user.user_profile.recook_bio
|
@user.user_profile.recook_bio
|
||||||
@user.user_profile.save!
|
@user.user_profile.save!
|
||||||
|
|
|
@ -133,5 +133,19 @@ RSpec.describe Jobs::Tl3Promotions do
|
||||||
run_job
|
run_job
|
||||||
expect(user.reload.trust_level).to eq(TrustLevel[3])
|
expect(user.reload.trust_level).to eq(TrustLevel[3])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "doesn't error if user is missing email records" do
|
||||||
|
user = nil
|
||||||
|
|
||||||
|
freeze_time 4.days.ago do
|
||||||
|
user = create_leader_user
|
||||||
|
end
|
||||||
|
user.user_emails.delete_all
|
||||||
|
|
||||||
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
||||||
|
run_job
|
||||||
|
expect(user.reload.trust_level).to eq(TrustLevel[2])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -273,4 +273,18 @@ RSpec.describe Promotion do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#change_trust_level!" do
|
||||||
|
fab!(:user) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
|
let(:promotion) { Promotion.new(user) }
|
||||||
|
|
||||||
|
context "when the user has no emails" do
|
||||||
|
before { user.user_emails.delete_all }
|
||||||
|
|
||||||
|
it "does not error" do
|
||||||
|
expect { promotion.change_trust_level!(TrustLevel[1]) }.not_to raise_error
|
||||||
|
expect(user.reload.trust_level).to eq(TrustLevel[1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user