forked from fedi/mastodon
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_validation :prepare_contents, if: :local?
|
||||
before_validation :prepare_username, on: :create
|
||||
before_destroy :clean_feed_manager
|
||||
|
||||
private
|
||||
|
@ -481,6 +482,10 @@ class Account < ApplicationRecord
|
|||
note&.strip!
|
||||
end
|
||||
|
||||
def prepare_username
|
||||
username&.squish!
|
||||
end
|
||||
|
||||
def generate_keys
|
||||
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)
|
||||
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
|
||||
it 'is invalid if the username is not unique in case-insensitive comparison among local accounts' do
|
||||
account_1 = Fabricate(:account, username: 'the_doctor')
|
||||
|
|
Loading…
Reference in a new issue