emails: move EmailValidator into Danbooru::EmailAddress.

This commit is contained in:
evazion
2022-10-17 20:13:59 -05:00
parent 9ea2c34f17
commit e31977ac29
9 changed files with 363 additions and 380 deletions

View File

@@ -0,0 +1,27 @@
require 'test_helper'
class DanbooruEmailAddressTest < ActiveSupport::TestCase
def assert_undeliverable(expected, address)
assert_equal(false, Danbooru::EmailAddress.new("webmaster@danbooru.donmai.us").undeliverable?(allow_smtp: true))
end
context "Danbooru::EmailAddress" do
context "#undeliverable?" do
should "return good addresses as deliverable" do
assert_undeliverable(false, "webmaster@danbooru.donmai.us")
assert_undeliverable(false, "noizave+spam@gmail.com")
end
should "return nonexistent domains as undeliverable" do
assert_undeliverable(true, "nobody@does.not.exist.donmai.us")
end
# XXX these tests are known to fail if your network blocks port 25.
should_eventually "return nonexistent addresses as undeliverable" do
assert_undeliverable(true, "does.not.exist.13yoigo34iy@gmail.com")
assert_undeliverable(true, "does.not.exist.13yoigo34iy@outlook.com")
assert_undeliverable(true, "does.not.exist.13yoigo34iy@hotmail.com")
end
end
end
end

View File

@@ -11,6 +11,8 @@ class EmailAddressTest < ActiveSupport::TestCase
should allow_value("foo_bar@gmail.com").for(:address)
should allow_value("foo+bar@gmail.com").for(:address)
should allow_value("foo@foo.bar.com").for(:address)
should allow_value("foo@iki.fi").for(:address)
should allow_value("foo@ne.jp").for(:address)
should_not allow_value("foo@example").for(:address)
should_not allow_value("fooqq@.com").for(:address)
@@ -21,6 +23,17 @@ class EmailAddressTest < ActiveSupport::TestCase
should_not allow_value("foo@localhost").for(:address)
end
context "normalization" do
should "normalize email addresses" do
assert_equal("foo@gmail.com", EmailAddress.new(address: "FOO@GMAIL.com").normalized_address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@googlemail.com").normalized_address.to_s)
assert_equal("foobar@gmail.com", EmailAddress.new(address: "foo.bar@googlemail.com").normalized_address.to_s)
assert_equal("foobar@gmail.com", EmailAddress.new(address: "foo.bar+nospam@googlemail.com").normalized_address.to_s)
assert_equal("foobar@gmail.com", EmailAddress.new(address: "Foo.Bar+nospam@Googlemail.com").normalized_address.to_s)
assert_equal("foo.bar@yahoo.com", EmailAddress.new(address: "Foo.Bar-nospam@yahoo.com").normalized_address.to_s)
end
end
should "fix typos" do
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail.com ").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: " foo@gmail.com").address.to_s)

View File

@@ -1,27 +0,0 @@
require 'test_helper'
class EmailValidatorTest < ActiveSupport::TestCase
context "EmailValidator" do
setup do
EmailValidator.stubs(:smtp_enabled?).returns(true)
end
context "#undeliverable?" do
should "return good addresses as deliverable" do
assert_equal(false, EmailValidator.undeliverable?("webmaster@danbooru.donmai.us"))
assert_equal(false, EmailValidator.undeliverable?("noizave+spam@gmail.com"))
end
should "return nonexistent domains as undeliverable" do
assert_equal(true, EmailValidator.undeliverable?("nobody@does.not.exist.donmai.us"))
end
# XXX these tests are known to fail if your network blocks port 25.
should_eventually "return nonexistent addresses as undeliverable" do
assert_equal(true, EmailValidator.undeliverable?("does.not.exist.13yoigo34iy@gmail.com"))
assert_equal(true, EmailValidator.undeliverable?("does.not.exist.13yoigo34iy@outlook.com"))
assert_equal(true, EmailValidator.undeliverable?("does.not.exist.13yoigo34iy@hotmail.com"))
end
end
end
end