From fb23258f6ae88eb6f1cc761f05b37301096b4208 Mon Sep 17 00:00:00 2001 From: Ignacio Orlandini <ignacioorlandini@gmail.com> Date: Sat, 7 Nov 2020 21:10:47 -0300 Subject: [PATCH] Fix Relay Connection ID (#56) --- graphene_django_optimizer/query.py | 2 ++ tests/schema.py | 6 +++--- tests/test_relay.py | 8 ++++++-- tests/test_resolver.py | 8 ++++++-- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/graphene_django_optimizer/query.py b/graphene_django_optimizer/query.py index fec3f3d..cafae40 100644 --- a/graphene_django_optimizer/query.py +++ b/graphene_django_optimizer/query.py @@ -282,6 +282,8 @@ class QueryOptimizer(object): resolver_fn = arg if isinstance(resolver_fn, functools.partial) and resolver_fn.func == default_resolver: return resolver_fn.args[0] + if self._is_resolver_for_id_field(resolver_fn): + return 'id' return resolver_fn def _is_resolver_for_id_field(self, resolver): diff --git a/tests/schema.py b/tests/schema.py index dbe973c..afbaa23 100644 --- a/tests/schema.py +++ b/tests/schema.py @@ -1,6 +1,6 @@ from django.db.models import Prefetch import graphene -from graphene import ConnectionField +from graphene import ConnectionField, relay from graphene_django.fields import DjangoConnectionField import graphene_django_optimizer as gql_optimizer from graphene_django_optimizer import OptimizedDjangoObjectType @@ -38,8 +38,8 @@ class ItemFilterInput(graphene.InputObjectType): class ItemInterface(graphene.Interface): - id = graphene.ID(required=True) - parent_id = graphene.ID() + id = relay.GlobalID() + parent_id = relay.GlobalID() foo = graphene.String() title = graphene.String() unoptimized_title = graphene.String() diff --git a/tests/test_relay.py b/tests/test_relay.py index a64de7d..1de193f 100644 --- a/tests/test_relay.py +++ b/tests/test_relay.py @@ -19,6 +19,7 @@ def test_should_return_valid_result_in_a_relay_query(): edges { node { id + parentId name } } @@ -26,7 +27,8 @@ def test_should_return_valid_result_in_a_relay_query(): } ''') assert not result.errors - assert result.data['relayItems']['edges'][0]['node']['id'] == '7' + assert result.data['relayItems']['edges'][0]['node']['id'] == 'SXRlbU5vZGU6Nw==' + assert result.data['relayItems']['edges'][0]['node']['parentId'] == 'SXRlbU5vZGU6Tm9uZQ==' assert result.data['relayItems']['edges'][0]['node']['name'] == 'foo' @@ -161,6 +163,7 @@ def test_should_resolve_nested_variables(): edges { node { id + parentId } } } @@ -174,4 +177,5 @@ def test_should_resolve_nested_variables(): assert len(item_edges) == 1 child_edges = item_edges[0]['node']['relayAllChildren']['edges'][0] assert len(child_edges) == 1 - assert child_edges['node']['id'] == '8' + assert child_edges['node']['id'] == 'SXRlbU5vZGU6OA==' + assert child_edges['node']['parentId'] == 'SXRlbU5vZGU6Nw==' diff --git a/tests/test_resolver.py b/tests/test_resolver.py index c06c831..f55b108 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -142,13 +142,15 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function(): foo filteredChildren(name: "bar") { id + parentId foo } } } ''') assert not result.errors - assert result.data['items'][0]['filteredChildren'][0]['id'] == '2' + assert result.data['items'][0]['filteredChildren'][0]['id'] == 'SXRlbVR5cGU6Mg==' + assert result.data['items'][0]['filteredChildren'][0]['parentId'] == 'SXRlbVR5cGU6MQ==' @pytest.mark.django_db @@ -163,10 +165,12 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function_using_va foo filteredChildren(name: $name) { id + parentId foo } } } ''', variables={'name': 'bar'}) assert not result.errors - assert result.data['items'][0]['filteredChildren'][0]['id'] == '2' + assert result.data['items'][0]['filteredChildren'][0]['id'] == 'SXRlbVR5cGU6Mg==' + assert result.data['items'][0]['filteredChildren'][0]['parentId'] == 'SXRlbVR5cGU6MQ==' -- GitLab