Swoosh is mucking with a few of my tests. It looks like there is no configurability in the test adapter to change the behavior and get it to stop sending messages. Is there an alternative test adapter that people are using? Maybe the Logger adapter?
It would seem like a silly solution to implement a handle_info catch-all in my LiveView just to make the tests pass.
defmodule Swoosh.Adapters.Test do
@moduledoc ~S"""
An adapter that sends emails as messages to the current process.
This is meant to be used during tests and works with the assertions found in
the [Swoosh.TestAssertions](Swoosh.TestAssertions.html) module.
## Example
# config/test.exs
config :sample, Sample.Mailer,
adapter: Swoosh.Adapters.Test
# lib/sample/mailer.ex
defmodule Sample.Mailer do
use Swoosh.Mailer, otp_app: :sample
end
"""
use Swoosh.Adapter
def deliver(email, _config) do
for pid <- pids() do
send(pid, {:email, email})
end
{:ok, %{}}
end
def deliver_many(emails, _config) do
for pid <- pids() do
send(pid, {:emails, emails})
end
responses = for _email <- emails, do: %{}
{:ok, responses}
end
# Essentially finds all of the processes that tried to send an email (in the test)
# and sends an email to that process.
defp pids do
if pid = Application.get_env(:swoosh, :shared_test_process) do
[pid]
else
Enum.uniq([self() | List.wrap(Process.get(:"$callers"))])
end
end
end