who_need_help/test/who_need_help/email_address_test.exs

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