4
4
5
5
from graphene .relay import Node
6
6
7
- from .models import Article , Editor , EmbeddedArticle , Reporter
7
+ from .models import Article , Editor , Player , Reporter
8
8
from .types import (ArticleNode , ArticleType ,
9
9
EditorNode , EditorType ,
10
+ PlayerNode , PlayerType ,
10
11
ReporterNode , ReporterType )
11
12
from ..fields import MongoengineConnectionField
12
13
@@ -28,6 +29,9 @@ def setup_fixtures():
28
29
reporter .articles = [article1 , article2 ]
29
30
reporter .save ()
30
31
32
+ player = Player (first_name = 'Michael' , last_name = 'Jordan' )
33
+ player .save ()
34
+
31
35
setup_fixtures ()
32
36
33
37
@@ -279,7 +283,10 @@ class Query(graphene.ObjectType):
279
283
articles(headline: "World") {
280
284
edges {
281
285
node {
282
- headline
286
+ headline,
287
+ editor {
288
+ firstName
289
+ }
283
290
}
284
291
}
285
292
}
@@ -290,7 +297,10 @@ class Query(graphene.ObjectType):
290
297
'edges' : [
291
298
{
292
299
'node' : {
293
- 'headline' : 'World'
300
+ 'headline' : 'World' ,
301
+ 'editor' : {
302
+ 'firstName' : 'Grant'
303
+ }
294
304
}
295
305
}
296
306
]
@@ -344,6 +354,7 @@ class Query(graphene.ObjectType):
344
354
def get_nodes (data ):
345
355
return map (lambda edge : edge ['node' ], data ['editors' ]['edges' ])
346
356
357
+ assert not result .errors
347
358
assert all (item in get_nodes (result .data ) for item in get_nodes (expected ))
348
359
349
360
def test_should_custom_kwargs ():
@@ -383,6 +394,57 @@ def resolve_editors(self, *args, **kwargs):
383
394
assert not result .errors
384
395
assert all (item in result .data ['editors' ] for item in expected ['editors' ])
385
396
397
+
398
+ def test_should_self_reference ():
399
+
400
+ class Query (graphene .ObjectType ):
401
+
402
+ players = MongoengineConnectionField (PlayerNode )
403
+
404
+ query = '''
405
+ query PlayerQuery {
406
+ players {
407
+ edges {
408
+ cursor,
409
+ node {
410
+ firstName,
411
+
412
+ }
413
+ }
414
+ }
415
+ }
416
+ '''
417
+ expected = {
418
+ 'players' : {
419
+ 'edges' : [
420
+ {
421
+ 'cursor' : 'xxx' ,
422
+ 'node' : {
423
+ 'firstName' : 'Penny'
424
+ }
425
+ },
426
+ {
427
+ 'cursor' : 'xxx' ,
428
+ 'node' : {
429
+ 'firstName' : 'Grant'
430
+ }
431
+ }
432
+ ]
433
+ }
434
+ }
435
+ schema = graphene .Schema (query = Query )
436
+ result = schema .execute (query )
437
+ print (result .data )
438
+
439
+ assert not result .errors
440
+ '''
441
+ def get_nodes(data):
442
+ return map(lambda edge: edge['node'], data['editors']['edges'])
443
+
444
+ assert all(item in get_nodes(result.data) for item in get_nodes(expected))
445
+ '''
446
+
447
+
386
448
# TODO:
387
449
def test_should_paging ():
388
450
pass
0 commit comments