Skip to content

Commit 2b4bb18

Browse files
committed
test: Make test_query.test_should_node pass.
1 parent ece4e78 commit 2b4bb18

File tree

5 files changed

+75
-14
lines changed

5 files changed

+75
-14
lines changed

graphene_mongoengine/converter.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from graphene import (ID, Boolean, Dynamic, Enum, Field, Float, Int, List,
2-
NonNull, String, UUID)
2+
NonNull, String, UUID, is_node)
33
from graphene.types.datetime import DateTime, Time
44
from graphene.types.json import JSONString
55
from graphene.utils.str_converters import to_camel_case, to_const
@@ -65,7 +65,9 @@ def convert_postgres_array_to_list(field, registry=None):
6565
base_type = convert_mongoengine_field(field.field, registry=registry)
6666
if isinstance(base_type, (Dynamic)):
6767
base_type = base_type.get_type()._type
68-
if not isinstance(base_type, (List, NonNull)) \
68+
if is_node(base_type):
69+
return MongoengineConnectionField(base_type)
70+
elif not isinstance(base_type, (List, NonNull)) \
6971
and not isinstance(field.field, mongoengine.ReferenceField):
7072
base_type = type(base_type)
7173
return List(base_type, description=field.db_field, required=not field.null)

graphene_mongoengine/fields.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,12 @@ def get_resolver(self, parent_resolver):
2929

3030
class MongoengineConnectionField(ConnectionField):
3131

32-
'''
33-
def __init__(self, *args, **kwargs):
34-
super(MongoengineConnectionField, self).__init(
32+
def __init__(self, type, *args, **kwargs):
33+
super(MongoengineConnectionField, self).__init__(
34+
type,
3535
*args,
3636
**kwargs
3737
)
38-
'''
3938

4039
@property
4140
def type(self):
@@ -62,7 +61,7 @@ def merge_querysets(cls, default_queryset, queryset):
6261
return queryset & default_queryset
6362

6463
"""
65-
TODO: Not sure this works well or not
64+
TODO: Not sure this works :(
6665
"""
6766
@classmethod
6867
def connection_resolver(cls, resolver, connection, model, root, info, **args):
@@ -85,5 +84,6 @@ def connection_resolver(cls, resolver, connection, model, root, info, **args):
8584
return connection
8685

8786
def get_resolver(self, parent_resolver):
87+
('??')
8888
return partial(self.connection_resolver, parent_resolver, self.type, self.model)
8989

graphene_mongoengine/tests/test_converter.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ def test_should_one2many_convert_list():
9292
class A(MongoengineObjectType):
9393
class Meta:
9494
model = Article
95-
interfaces = (Node,)
9695

9796
graphene_field = convert_mongoengine_field(
9897
Reporter._fields['articles'], A._meta.registry)

graphene_mongoengine/tests/test_query.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,64 @@ def resolve_reporter(self, *args, **kwargs):
119119
assert not result.errors
120120
assert dict(result.data['reporter']) == expected['reporter']
121121

122+
def test_should_node():
123+
class ArticleNode(MongoengineObjectType):
124+
class Meta:
125+
model = Article
126+
interfaces = (Node,)
127+
128+
class ReporterNode(MongoengineObjectType):
129+
class Meta:
130+
model = Reporter
131+
interfaces = (Node,)
132+
133+
class Query(graphene.ObjectType):
134+
node = Node.Field()
135+
reporter = graphene.Field(ReporterNode)
136+
137+
def resolve_reporter(self, *args, **kwargs):
138+
return Reporter.objects.first()
139+
140+
query = '''
141+
query ReporterQuery {
142+
reporter {
143+
firstName,
144+
articles {
145+
edges {
146+
node {
147+
headline
148+
}
149+
}
150+
}
151+
lastName,
152+
email
153+
}
154+
}
155+
'''
156+
expected = {
157+
'reporter': {
158+
'firstName': 'Allen',
159+
'lastName': 'Iverson',
160+
'articles': {
161+
'edges': [
162+
{
163+
'node': {
164+
'headline': 'Hello'
165+
}
166+
},
167+
{
168+
'node': {
169+
'headline': 'World'
170+
}
171+
}
172+
],
173+
},
174+
'email': '[email protected]'
175+
}
176+
}
177+
178+
schema = graphene.Schema(query=Query)
179+
result = schema.execute(query)
180+
assert not result.errors
181+
assert dict(result.data['reporter']) == expected['reporter']
182+

graphene_mongoengine/types.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
7979
_meta.registry = registry
8080
_meta.fields = mongoengine_fields
8181
_meta.connection = connection
82-
8382
super(MongoengineObjectType, cls).__init_subclass_with_meta__(
8483
_meta=_meta, interfaces=interfaces, **options
8584
)
@@ -101,13 +100,13 @@ def is_type_of(cls, root, info):
101100
def get_node(cls, id, context, info):
102101
if isinstance(getattr(cls._meta.model, get_key_name(cls._meta.model)), NumberAttribute):
103102
return cls._meta.model.get(int(id))
104-
else:
105-
return cls._meta.model.get(id)
103+
104+
return cls._meta.model.get(id)
106105

107106
def resolve_id(self, info):
108107
return str(self.id)
109108

110-
@classmethod
111-
def get_connection(cls):
112-
return connection_for_type(cls)
109+
#@classmethod
110+
#def get_connection(cls):
111+
# return connection_for_type(cls)
113112

0 commit comments

Comments
 (0)