ash_graphql/test/support/pub_sub.ex

61 lines
1.4 KiB
Elixir
Raw Normal View History

2023-10-16 00:09:30 +13:00
defmodule AshGraphql.Test.PubSub do
@behaviour Absinthe.Subscription.Pubsub
def start_link() do
Registry.start_link(keys: :duplicate, name: __MODULE__)
end
def node_name() do
node()
end
def subscribe(topic) do
2023-12-08 23:59:32 +13:00
# IO.inspect([topic: topic], label: "subscribe")
2023-10-28 01:50:51 +13:00
Registry.register(__MODULE__, topic, [self()])
2023-10-16 00:09:30 +13:00
:ok
end
def publish_subscription(topic, data) do
2023-10-28 01:50:51 +13:00
message =
%{
topic: topic,
event: "subscription:data",
result: data
}
2023-12-08 23:59:32 +13:00
# |> IO.inspect(label: :publish_subscription)
2023-10-16 00:09:30 +13:00
Registry.dispatch(__MODULE__, topic, fn entries ->
for {pid, _} <- entries, do: send(pid, {:broadcast, message})
end)
end
def broadcast(topic, event, notification) do
2023-12-08 23:59:32 +13:00
# IO.inspect([topic: topic, event: event, notification: notification], label: "broadcast")
2023-10-28 01:50:51 +13:00
2023-10-16 00:09:30 +13:00
message =
%{
topic: topic,
event: event,
result: notification
}
Registry.dispatch(__MODULE__, topic, fn entries ->
for {pid, _} <- entries, do: send(pid, {:broadcast, message})
end)
end
2023-12-08 23:59:32 +13:00
def publish_mutation(proxy_topic, mutation_result, subscribed_fields) do
2023-10-16 00:09:30 +13:00
# this pubsub is local and doesn't support clusters
2023-10-28 01:50:51 +13:00
IO.inspect("publish mutation")
2023-12-08 23:59:32 +13:00
send(
Application.get_env(__MODULE__, :notifier_test_pid) |> IO.inspect(label: :send_to),
{:broadcast, proxy_topic, mutation_result, subscribed_fields}
)
|> IO.inspect(label: :send)
2023-10-16 00:09:30 +13:00
:ok
end
end