about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAurélien Reeves <aurelien.reeves@hiptest.net>2019-03-11 20:48:24 +0100
committerEugen Rochko <eugen@zeonfederated.com>2019-03-11 20:48:24 +0100
commit85537b00695b1091e2a147597ab7c3557b150b11 (patch)
treecf722bd91358600bbcb751dc0abee98166daa1c3
parentf5eeac01047874269bbb2910bab4b32f739c616d (diff)
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.
-rw-r--r--app/models/account.rb5
-rw-r--r--spec/models/account_spec.rb5
2 files changed, 10 insertions, 0 deletions
diff --git a/app/models/account.rb b/app/models/account.rb
index b81c64182..d6d718354 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -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?
 
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index f7f78d34c..46886b91f 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -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')