53 lines
1.8 KiB
Elixir
53 lines
1.8 KiB
Elixir
defmodule WhoNeedHelp.EmailAddressTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
import Swoosh.Email
|
|
|
|
alias WhoNeedHelp.EmailAddress
|
|
alias WhoNeedHelp.EmailDelivery
|
|
alias Swoosh.Adapters.SMTP.Helpers
|
|
|
|
test "accepts ordinary mailbox addresses used by transactional email" do
|
|
assert EmailAddress.valid?("person@example.com")
|
|
assert EmailAddress.valid?("person+alerts@example.co.uk")
|
|
end
|
|
|
|
test "rejects addresses that the SMTP adapter cannot safely parse" do
|
|
refute EmailAddress.valid?(".person@example.com")
|
|
refute EmailAddress.valid?("person.@example.com")
|
|
refute EmailAddress.valid?("two..dots@example.com")
|
|
refute EmailAddress.valid?("person@example")
|
|
refute EmailAddress.valid?("person@-example.com")
|
|
refute EmailAddress.valid?("person@example..com")
|
|
refute EmailAddress.valid?("person@exam ple.com")
|
|
refute EmailAddress.valid?("first@example.com,second@example.com")
|
|
end
|
|
|
|
test "every accepted address can be encoded by the configured SMTP implementation" do
|
|
for address <- ["person@example.com", "person+alerts@example.co.uk"] do
|
|
encoded =
|
|
new()
|
|
|> from({"Who Need Help", "contact@example.com"})
|
|
|> to(address)
|
|
|> reply_to("support@example.com")
|
|
|> subject("Email address compatibility")
|
|
|> text_body("Compatibility check")
|
|
|> Helpers.body([])
|
|
|
|
assert is_binary(encoded)
|
|
end
|
|
end
|
|
|
|
test "delivery rejects an invalid envelope before invoking the mail adapter" do
|
|
email =
|
|
new()
|
|
|> from({"Who Need Help", "contact@example.com"})
|
|
|> to(".person@example.com")
|
|
|> subject("Invalid envelope check")
|
|
|> text_body("This message must not be delivered")
|
|
|
|
assert {:error, :invalid_email_address} =
|
|
EmailDelivery.deliver(email, :auth_login)
|
|
end
|
|
end
|