ash_graphql/test/subscription_test.exs
Barnabas Jovanovics 57d87cfe92 wip
2024-08-26 11:40:52 +02:00

72 lines
1.7 KiB
Elixir

defmodule AshGraphql.SubscriptionTest do
use ExUnit.Case
alias AshGraphql.Test.PubSub
alias AshGraphql.Test.Schema
setup_all do
Application.put_env(PubSub, :notifier_test_pid, self())
{:ok, _} = PubSub.start_link()
{:ok, _} = Absinthe.Subscription.start_link(PubSub)
:ok
end
@query """
subscription {
post_created { id }
}
"""
@tag :wip
test "subscription triggers work" do
id = "1"
assert {:ok, %{"subscribed" => topic}} =
run_subscription(
@query,
Schema,
variables: %{"userId" => id},
context: %{pubsub: PubSub, actor: %{id: id}}
)
mutation = """
mutation SimpleCreatePost($input: SimpleCreatePostInput) {
simpleCreatePost(input: $input) {
result{
text1
integerAsStringInApi
}
errors{
message
}
}
}
"""
assert {:ok, %{data: _}} =
run_subscription(mutation, Schema,
variables: %{"input" => %{"text1" => "foo", "integerAsStringInApi" => "1"}},
context: %{pubsub: PubSub}
)
assert_receive({:broadcast, msg})
assert %{
event: "subscription:data",
result: %{data: %{"user" => %{"id" => "1", "name" => "foo"}}},
topic: topic
} == msg
end
defp run_subscription(query, schema, opts) do
opts = Keyword.update(opts, :context, %{pubsub: PubSub}, &Map.put(&1, :pubsub, PubSub))
case Absinthe.run(query, schema, opts) do
{:ok, %{"subscribed" => topic}} = val ->
PubSub.subscribe(topic)
val
val ->
val
end
end
end