diff --git a/graphene/relay/node.py b/graphene/relay/node.py index ee053442..9d795875 100644 --- a/graphene/relay/node.py +++ b/graphene/relay/node.py @@ -47,7 +47,7 @@ class GlobalID(Field): return node.to_global_id(parent_type_name, type_id) # root._meta.name def get_resolver(self, parent_resolver): - return partial(self.id_resolver, parent_resolver, self.node, parent_type_name=self._parent_type_name) + return partial(self.id_resolver, parent_resolver, self.node, parent_type_name=self.parent_type_name) class NodeMeta(InterfaceMeta): diff --git a/graphene/relay/tests/test_global_id.py b/graphene/relay/tests/test_global_id.py index d45b5da6..b0a6c5cb 100644 --- a/graphene/relay/tests/test_global_id.py +++ b/graphene/relay/tests/test_global_id.py @@ -1,6 +1,8 @@ -from ..node import Node, GlobalID +from graphql_relay import to_global_id -from ...types import NonNull, ID +from ..node import Node, GlobalID +from ...types import NonNull, ID, ObjectType, String +from ...types.definitions import GrapheneObjectType class CustomNode(Node): @@ -9,6 +11,26 @@ class CustomNode(Node): name = 'Node' +class User(ObjectType): + + class Meta: + interfaces = [CustomNode] + name = String() + + +class Info(object): + + def __init__(self, parent_type): + self.parent_type = GrapheneObjectType( + graphene_type=parent_type, + name=parent_type._meta.name, + description=parent_type._meta.description, + fields=None, + is_type_of=parent_type.is_type_of, + interfaces=None + ) + + def test_global_id_defaults_to_required_and_node(): gid = GlobalID() assert isinstance(gid.type, NonNull) @@ -20,3 +42,19 @@ def test_global_id_allows_overriding_of_node_and_required(): gid = GlobalID(node=CustomNode, required=False) assert gid.type == ID assert gid.node == CustomNode + + +def test_global_id_defaults_to_info_parent_type(): + my_id = '1' + gid = GlobalID() + id_resolver = gid.get_resolver(lambda *_: my_id) + my_global_id = id_resolver(None, None, None, Info(User)) + assert my_global_id == to_global_id(User._meta.name, my_id) + + +def test_global_id_allows_setting_customer_parent_type(): + my_id = '1' + gid = GlobalID(parent_type=User) + id_resolver = gid.get_resolver(lambda *_: my_id) + my_global_id = id_resolver(None, None, None, None) + assert my_global_id == to_global_id(User._meta.name, my_id)