Squish username before validation (#10239)
* Squish username before validation (#10101) Fix #10101 * Move before_validation hook to a private method Also add Unicode wite-spaces to the spec to support the use of squish over strip.
This commit is contained in:
parent
f5eeac0104
commit
85537b0069
|
@ -472,6 +472,7 @@ class Account < ApplicationRecord
|
||||||
|
|
||||||
before_create :generate_keys
|
before_create :generate_keys
|
||||||
before_validation :prepare_contents, if: :local?
|
before_validation :prepare_contents, if: :local?
|
||||||
|
before_validation :prepare_username, on: :create
|
||||||
before_destroy :clean_feed_manager
|
before_destroy :clean_feed_manager
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -481,6 +482,10 @@ class Account < ApplicationRecord
|
||||||
note&.strip!
|
note&.strip!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prepare_username
|
||||||
|
username&.squish!
|
||||||
|
end
|
||||||
|
|
||||||
def generate_keys
|
def generate_keys
|
||||||
return unless local? && !Rails.env.test?
|
return unless local? && !Rails.env.test?
|
||||||
|
|
||||||
|
|
|
@ -558,6 +558,11 @@ RSpec.describe Account, type: :model do
|
||||||
expect(account).to model_have_error_on_field(:username)
|
expect(account).to model_have_error_on_field(:username)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'squishes the username before validation' do
|
||||||
|
account = Fabricate(:account, domain: nil, username: " \u3000bob \t \u00a0 \n ")
|
||||||
|
expect(account.username).to eq 'bob'
|
||||||
|
end
|
||||||
|
|
||||||
context 'when is local' do
|
context 'when is local' do
|
||||||
it 'is invalid if the username is not unique in case-insensitive comparison among local accounts' do
|
it 'is invalid if the username is not unique in case-insensitive comparison among local accounts' do
|
||||||
account_1 = Fabricate(:account, username: 'the_doctor')
|
account_1 = Fabricate(:account, username: 'the_doctor')
|
||||||
|
|
Loading…
Reference in New Issue