diff --git a/lib/absinthe/phase/document/result.ex b/lib/absinthe/phase/document/result.ex index dd6a0928..651555b7 100644 --- a/lib/absinthe/phase/document/result.ex +++ b/lib/absinthe/phase/document/result.ex @@ -109,6 +109,15 @@ defmodule Absinthe.Phase.Document.Result do defp field_name(%{alias: name}), do: name defp field_name(%{name: name}), do: name + defp format_error(%Phase.Error{message: %{message: _message} = error_object} = error, _opts) do + if Enum.empty?(error.locations) do + error_object + else + locations = Enum.flat_map(error.locations, &format_location/1) + Map.put_new(error_object, :locations, locations) + end + end + defp format_error(%Phase.Error{locations: []} = error, opts) do error_object = %{message: error.message} diff --git a/test/absinthe/execution/subscription_test.exs b/test/absinthe/execution/subscription_test.exs index 34aa5435..c3355dce 100644 --- a/test/absinthe/execution/subscription_test.exs +++ b/test/absinthe/execution/subscription_test.exs @@ -214,6 +214,18 @@ defmodule Absinthe.Execution.SubscriptionTest do {:ok, topic: "*", context_id: "*", document_id: op_name} end end + + field :config_error, :string do + config fn _, _ -> + {:error, "failed"} + end + end + + field :config_error_with_map, :string do + config fn _, _ -> + {:error, %{message: "failed", extensions: %{code: "FAILED"}}} + end + end end mutation do @@ -584,6 +596,36 @@ defmodule Absinthe.Execution.SubscriptionTest do assert_receive(:batch_get_group) end + @query """ + subscription Example { + configError + } + """ + test "config errors" do + assert {:ok, %{errors: [%{message: "failed"}]}} = + run_subscription( + @query, + Schema, + variables: %{}, + context: %{pubsub: PubSub} + ) + end + + @query """ + subscription Example { + configErrorWithMap + } + """ + test "config errors with a map" do + assert {:ok, %{errors: [%{message: "failed", extensions: %{code: "FAILED"}}]}} = + run_subscription( + @query, + Schema, + variables: %{}, + context: %{pubsub: PubSub} + ) + end + describe "subscription_ids" do @query """ subscription {