From 4619f54e5e941215055f0f31ed24a6d9ef38adbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Pito=C5=84?= Date: Mon, 29 Jul 2019 18:41:05 +0200 Subject: [PATCH] Add tests for tracing extensions --- tests/conftest.py | 6 +++ tests/tracing/test_apollotracing.py | 60 +++++++++++++++++++++++++++++ tests/tracing/test_opentracing.py | 8 ++++ 3 files changed, 74 insertions(+) create mode 100644 tests/tracing/test_apollotracing.py diff --git a/tests/conftest.py b/tests/conftest.py index 4d86497ad..fe8d8da0a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -19,6 +19,7 @@ def type_defs(): status: Boolean testContext: String testRoot: String + error: Boolean } type Mutation { @@ -51,6 +52,10 @@ def resolve_test_root(root, *_): return root.get("test") +def resolve_error(*_): + raise Exception("This resolver always errors!") + + @pytest.fixture def resolvers(): query = QueryType() @@ -58,6 +63,7 @@ def resolvers(): query.set_field("status", resolve_status) query.set_field("testContext", resolve_test_context) query.set_field("testRoot", resolve_test_root) + query.set_field("error", resolve_error) return query diff --git a/tests/tracing/test_apollotracing.py b/tests/tracing/test_apollotracing.py new file mode 100644 index 000000000..892063114 --- /dev/null +++ b/tests/tracing/test_apollotracing.py @@ -0,0 +1,60 @@ +import pytest + +from ariadne import graphql +from ariadne.contrib.tracing.apollo import ApolloTracingExtension + + +@pytest.mark.asyncio +async def test_apollotracing_extension_causes_no_errors_in_query_execution(schema): + _, result = await graphql( + schema, {"query": "{ status }"}, extensions=[ApolloTracingExtension] + ) + assert result["data"] == {"status": True} + + +@pytest.mark.asyncio +async def test_apollotracing_extension_adds_tracing_data_to_result_extensions(schema): + _, result = await graphql( + schema, {"query": "{ status }"}, extensions=[ApolloTracingExtension] + ) + assert result["extensions"]["tracing"]["version"] == 1 + assert result["extensions"]["tracing"]["startTime"] + assert result["extensions"]["tracing"]["endTime"] + assert result["extensions"]["tracing"]["duration"] + assert result["extensions"]["tracing"]["execution"] + + +@pytest.mark.asyncio +async def test_apollotracing_extension_adds_resolvers_timing_in_result_extensions( + schema +): + _, result = await graphql( + schema, {"query": "{ status }"}, extensions=[ApolloTracingExtension] + ) + + resolvers = result["extensions"]["tracing"]["execution"]["resolvers"] + + assert len(resolvers) == 1 + assert resolvers[0]["path"] == ["status"] + assert resolvers[0]["parentType"] == "Query" + assert resolvers[0]["fieldName"] == "status" + assert resolvers[0]["returnType"] == "Boolean" + assert resolvers[0]["startOffset"] + assert resolvers[0]["duration"] + + +@pytest.mark.asyncio +async def test_apollotracing_extension_handles_exceptions_in_resolvers(schema): + _, result = await graphql( + schema, {"query": "{ error status }"}, extensions=[ApolloTracingExtension] + ) + + resolvers = result["extensions"]["tracing"]["execution"]["resolvers"] + + assert len(resolvers) == 2 + assert resolvers[0]["path"] == ["error"] + assert resolvers[0]["parentType"] == "Query" + assert resolvers[0]["fieldName"] == "error" + assert resolvers[0]["returnType"] == "Boolean" + assert resolvers[0]["startOffset"] + assert resolvers[0]["duration"] diff --git a/tests/tracing/test_opentracing.py b/tests/tracing/test_opentracing.py index 5a56c73ae..d2a25e68c 100644 --- a/tests/tracing/test_opentracing.py +++ b/tests/tracing/test_opentracing.py @@ -97,3 +97,11 @@ async def test_opentracing_extension_sets_filtered_args_on_span( call("graphql.param.name", "[filtered]"), ] ) + + +@pytest.mark.asyncio +async def test_opentracing_extension_handles_errors_in_resolvers(schema): + _, result = await graphql( + schema, {"query": "{ error status }"}, extensions=[OpenTracingExtension] + ) + assert result["data"] == {"error": None, "status": True}