ash_graphql/test/errors_test.exs

158 lines
3.7 KiB
Elixir
Raw Normal View History

defmodule AshGraphql.ErrorsTest do
use ExUnit.Case, async: false
import ExUnit.CaptureLog
setup do
on_exit(fn ->
Application.delete_env(:ash_graphql, AshGraphql.Test.Api)
try do
Ash.DataLayer.Ets.stop(AshGraphql.Test.Post)
Ash.DataLayer.Ets.stop(AshGraphql.Test.Comment)
rescue
_ ->
:ok
end
end)
end
test "errors can be configured to be shown in the root" do
Application.put_env(:ash_graphql, AshGraphql.Test.Api, graphql: [root_level_errors?: true])
resp =
"""
mutation CreatePost($input: CreatePostInput) {
createPost(input: $input) {
result{
text
}
errors{
message
}
}
}
"""
|> Absinthe.run(AshGraphql.Test.Schema,
variables: %{
"input" => %{
"text" => "foobar",
"confirmation" => "foobar2"
}
}
)
assert {:ok, result} = resp
assert %{data: %{"createPost" => nil}, errors: [%{message: message}]} = result
assert message =~ "Confirmation did not match value"
end
test "raised errors are by default not shown" do
assert capture_log(fn ->
resp =
"""
mutation CreatePostWithError($input: CreatePostWithErrorInput) {
createPostWithError(input: $input) {
result{
text
}
errors{
message
}
}
}
"""
|> Absinthe.run(AshGraphql.Test.Schema,
variables: %{
"input" => %{
"text" => "foobar"
}
}
)
assert {:ok, result} = resp
assert %{data: %{"createPostWithError" => nil}, errors: [%{message: message}]} =
result
assert message =~ "Something went wrong."
end) =~ "Exception raised while resolving query"
end
test "raised errors can be configured to be shown" do
Application.put_env(:ash_graphql, AshGraphql.Test.Api, graphql: [show_raised_errors?: true])
resp =
"""
mutation CreatePostWithError($input: CreatePostWithErrorInput) {
createPostWithError(input: $input) {
result{
text
}
errors{
message
}
}
}
"""
|> Absinthe.run(AshGraphql.Test.Schema,
variables: %{
"input" => %{
"text" => "foobar"
}
}
)
assert {:ok, result} = resp
assert %{
data: %{
"createPostWithError" => %{"errors" => [%{"message" => message}]}
}
} = result
assert message =~ "is required"
end
test "showing raised errors alongside root errors shows raised errors in the root" do
Application.put_env(:ash_graphql, AshGraphql.Test.Api,
graphql: [show_raised_errors?: true, root_level_errors?: true]
)
resp =
"""
mutation CreatePostWithError($input: CreatePostWithErrorInput) {
createPostWithError(input: $input) {
result{
text
}
errors{
message
}
}
}
"""
|> Absinthe.run(AshGraphql.Test.Schema,
variables: %{
"input" => %{
"text" => "foobar"
}
}
)
assert {:ok, result} = resp
assert %{
data: %{
"createPostWithError" => nil
},
errors: [
%{message: message}
]
} = result
assert message =~ "is required"
end
end