From d1e08bd38c029f0b47dfd2f3ba61ca5bb3e414b8 Mon Sep 17 00:00:00 2001
From: Matt Jankowski <mjankowski@thoughtbot.com>
Date: Thu, 1 Jun 2017 08:20:36 -0400
Subject: [PATCH] Handle nil and blank cases in Account finders (#3500)
---
app/models/concerns/account_finder_concern.rb | 10 +++++++---
.../concerns/account_finder_concern_spec.rb | 16 ++++++++++++++++
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/app/models/concerns/account_finder_concern.rb b/app/models/concerns/account_finder_concern.rb
index d3ad519b12..561c7ab9f8 100644
--- a/app/models/concerns/account_finder_concern.rb
+++ b/app/models/concerns/account_finder_concern.rb
@@ -37,21 +37,25 @@ module AccountFinderConcern
def scoped_accounts
Account.unscoped.tap do |scope|
+ scope.merge! with_usernames
scope.merge! matching_username
scope.merge! matching_domain
end
end
+ def with_usernames
+ Account.where.not(username: [nil, ''])
+ end
+
def matching_username
- raise(ActiveRecord::RecordNotFound) if username.blank?
- Account.where(Account.arel_table[:username].lower.eq username.downcase)
+ Account.where(Account.arel_table[:username].lower.eq username.to_s.downcase)
end
def matching_domain
if domain.nil?
Account.where(domain: nil)
else
- Account.where(Account.arel_table[:domain].lower.eq domain.downcase)
+ Account.where(Account.arel_table[:domain].lower.eq domain.to_s.downcase)
end
end
end
diff --git a/spec/models/concerns/account_finder_concern_spec.rb b/spec/models/concerns/account_finder_concern_spec.rb
index 05f0f44f27..25f4fdec4b 100644
--- a/spec/models/concerns/account_finder_concern_spec.rb
+++ b/spec/models/concerns/account_finder_concern_spec.rb
@@ -24,6 +24,14 @@ describe AccountFinderConcern do
it 'returns nil for regex style username value' do
expect(Account.find_local('al%')).to be_nil
end
+
+ it 'returns nil for nil username value' do
+ expect(Account.find_local(nil)).to be_nil
+ end
+
+ it 'returns nil for blank username value' do
+ expect(Account.find_local('')).to be_nil
+ end
end
describe '.find_local!' do
@@ -70,6 +78,14 @@ describe AccountFinderConcern do
it 'returns nil for regex style domain value' do
expect(Account.find_remote('alice', 'm%')).to be_nil
end
+
+ it 'returns nil for nil username value' do
+ expect(Account.find_remote(nil, 'domain')).to be_nil
+ end
+
+ it 'returns nil for blank username value' do
+ expect(Account.find_remote('', 'domain')).to be_nil
+ end
end
describe '.find_remote!' do
--
GitLab