defmodule API.ChannelCase do use ExUnit.CaseTemplate use Domain.CaseTemplate @presences [ Domain.Clients.Presence, Domain.Gateways.Presence, Domain.Relays.Presence ] using do quote do # Import conveniences for testing with channels import Phoenix.ChannelTest import API.ChannelCase alias Domain.Repo alias Domain.Fixtures require OpenTelemetry.Tracer # The default endpoint for testing @endpoint API.Endpoint end end setup tags do for presence <- @presences, pid <- presence.fetchers_pids() do # TODO: If we start using Presence.fetch/2 callback we might want to # contribute to Phoenix.Presence a way to propagate sandbox access from # the parent to the task supervisor it spawns in start_link/1 every time # it's used. Because this would not work as is: # Ecto.Adapters.SQL.Sandbox.allow(Domain.Repo, self(), pid) on_exit(fn -> ref = Process.monitor(pid) assert_receive {:DOWN, ^ref, _, _, _}, 1000 end) end tags end end