summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/email_address.rb6
-rw-r--r--test/unit/email_address_test.rb6
2 files changed, 11 insertions, 1 deletions
diff --git a/app/models/email_address.rb b/app/models/email_address.rb
index 69ae8a066..de8c86531 100644
--- a/app/models/email_address.rb
+++ b/app/models/email_address.rb
@@ -74,7 +74,7 @@ class EmailAddress < ApplicationRecord
# Returns true if domain belongs to domains list.
def self.domain_in?(domain, domains)
- domain = domain.downcase
+ domain = domain.to_s.downcase
domains = domains.to_s.split(/[\s,]+/) unless domains.is_a?(Array)
domains.reject(&:blank?).map(&:downcase).any? do |s|
s.start_with?('.') ? domain.end_with?(s) : domain == s
@@ -150,6 +150,10 @@ class EmailAddress < ApplicationRecord
def validate_email_domain
domain = address.partition('@').last
+ # Skip domain validation if the email does not contain a domain part,
+ # to avoid an incomplete error message like "domain not allowed ()"
+ return if domain.empty?
+
return if self.class.valid_domain?(domain)
if User.current.logged?
diff --git a/test/unit/email_address_test.rb b/test/unit/email_address_test.rb
index 9d57beb97..923df897a 100644
--- a/test/unit/email_address_test.rb
+++ b/test/unit/email_address_test.rb
@@ -63,6 +63,12 @@ class EmailAddressTest < ActiveSupport::TestCase
end
end
+ def test_domain_in_should_not_raise_exception_when_domain_is_nil
+ assert_nothing_raised do
+ assert_not EmailAddress.domain_in?(nil, 'example.com')
+ end
+ end
+
def test_should_reject_invalid_email
assert_not EmailAddress.new(address: 'invalid,email@example.com').valid?
end