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
							
								
									2572884347
								
							
						
					
					
						commit
						ae33129975
					
				
					 2 changed files with 10 additions and 0 deletions
				
			
		| 
						 | 
					@ -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 a new issue