diff --git a/graphene_django_optimizer/query.py b/graphene_django_optimizer/query.py index fec3f3d10ec3b8e8b2affd73d0ef7cd399163d4d..cafae4055b1f502c635d1f892175e8374090cefe 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 dbe973c4bb0876940d4d6be7726213be8b3b8ffe..afbaa23d2701bf2872a67806758bc10c44a9faec 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 a64de7db497849bef0c774d9e8de32285b07f5a8..1de193fb33470257ea580bcd6673e52b999e1cac 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 c06c8312467482ad79809aa23064ad485c6b9f83..f55b108f69f122bbf6081192636188c0b1dced42 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=='