Skip to content
Snippets Groups Projects
Unverified Commit fb23258f authored by Ignacio Orlandini's avatar Ignacio Orlandini Committed by GitHub
Browse files

Fix Relay Connection ID (#56)

parent 760676ea
No related branches found
No related tags found
No related merge requests found
...@@ -282,6 +282,8 @@ class QueryOptimizer(object): ...@@ -282,6 +282,8 @@ class QueryOptimizer(object):
resolver_fn = arg resolver_fn = arg
if isinstance(resolver_fn, functools.partial) and resolver_fn.func == default_resolver: if isinstance(resolver_fn, functools.partial) and resolver_fn.func == default_resolver:
return resolver_fn.args[0] return resolver_fn.args[0]
if self._is_resolver_for_id_field(resolver_fn):
return 'id'
return resolver_fn return resolver_fn
def _is_resolver_for_id_field(self, resolver): def _is_resolver_for_id_field(self, resolver):
......
from django.db.models import Prefetch from django.db.models import Prefetch
import graphene import graphene
from graphene import ConnectionField from graphene import ConnectionField, relay
from graphene_django.fields import DjangoConnectionField from graphene_django.fields import DjangoConnectionField
import graphene_django_optimizer as gql_optimizer import graphene_django_optimizer as gql_optimizer
from graphene_django_optimizer import OptimizedDjangoObjectType from graphene_django_optimizer import OptimizedDjangoObjectType
...@@ -38,8 +38,8 @@ class ItemFilterInput(graphene.InputObjectType): ...@@ -38,8 +38,8 @@ class ItemFilterInput(graphene.InputObjectType):
class ItemInterface(graphene.Interface): class ItemInterface(graphene.Interface):
id = graphene.ID(required=True) id = relay.GlobalID()
parent_id = graphene.ID() parent_id = relay.GlobalID()
foo = graphene.String() foo = graphene.String()
title = graphene.String() title = graphene.String()
unoptimized_title = graphene.String() unoptimized_title = graphene.String()
......
...@@ -19,6 +19,7 @@ def test_should_return_valid_result_in_a_relay_query(): ...@@ -19,6 +19,7 @@ def test_should_return_valid_result_in_a_relay_query():
edges { edges {
node { node {
id id
parentId
name name
} }
} }
...@@ -26,7 +27,8 @@ def test_should_return_valid_result_in_a_relay_query(): ...@@ -26,7 +27,8 @@ def test_should_return_valid_result_in_a_relay_query():
} }
''') ''')
assert not result.errors 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' assert result.data['relayItems']['edges'][0]['node']['name'] == 'foo'
...@@ -161,6 +163,7 @@ def test_should_resolve_nested_variables(): ...@@ -161,6 +163,7 @@ def test_should_resolve_nested_variables():
edges { edges {
node { node {
id id
parentId
} }
} }
} }
...@@ -174,4 +177,5 @@ def test_should_resolve_nested_variables(): ...@@ -174,4 +177,5 @@ def test_should_resolve_nested_variables():
assert len(item_edges) == 1 assert len(item_edges) == 1
child_edges = item_edges[0]['node']['relayAllChildren']['edges'][0] child_edges = item_edges[0]['node']['relayAllChildren']['edges'][0]
assert len(child_edges) == 1 assert len(child_edges) == 1
assert child_edges['node']['id'] == '8' assert child_edges['node']['id'] == 'SXRlbU5vZGU6OA=='
assert child_edges['node']['parentId'] == 'SXRlbU5vZGU6Nw=='
...@@ -142,13 +142,15 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function(): ...@@ -142,13 +142,15 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function():
foo foo
filteredChildren(name: "bar") { filteredChildren(name: "bar") {
id id
parentId
foo foo
} }
} }
} }
''') ''')
assert not result.errors 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 @pytest.mark.django_db
...@@ -163,10 +165,12 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function_using_va ...@@ -163,10 +165,12 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function_using_va
foo foo
filteredChildren(name: $name) { filteredChildren(name: $name) {
id id
parentId
foo foo
} }
} }
} }
''', variables={'name': 'bar'}) ''', variables={'name': 'bar'})
assert not result.errors 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=='
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment