diff --git a/elixir/apps/domain/lib/domain/relays.ex b/elixir/apps/domain/lib/domain/relays.ex index 82333321c..1ef54186c 100644 --- a/elixir/apps/domain/lib/domain/relays.ex +++ b/elixir/apps/domain/lib/domain/relays.ex @@ -238,10 +238,15 @@ defmodule Domain.Relays do end defp preload_online_statuses(relays, account_id) do + connected_global_relays = Presence.list("relays") connected_relays = Presence.list("relays:#{account_id}") Enum.map(relays, fn relay -> - %{relay | online?: Map.has_key?(connected_relays, relay.id)} + online? = + Map.has_key?(connected_relays, relay.id) or + Map.has_key?(connected_global_relays, relay.id) + + %{relay | online?: online?} end) end diff --git a/elixir/apps/domain/test/domain/relays_test.exs b/elixir/apps/domain/test/domain/relays_test.exs index 788e40e9a..f6578489d 100644 --- a/elixir/apps/domain/test/domain/relays_test.exs +++ b/elixir/apps/domain/test/domain/relays_test.exs @@ -474,8 +474,17 @@ defmodule Domain.RelaysTest do RelaysFixtures.create_relay(account: account) RelaysFixtures.create_relay() + group = RelaysFixtures.create_global_group() + relay = RelaysFixtures.create_relay(group: group) + assert {:ok, relays} = list_relays(subject) - assert length(relays) == 2 + assert length(relays) == 3 + refute Enum.any?(relays, & &1.online?) + + :ok = connect_relay(relay, Ecto.UUID.generate()) + assert {:ok, relays} = list_relays(subject) + assert length(relays) == 3 + assert Enum.any?(relays, & &1.online?) end test "returns error when subject has no permission to manage relays", %{