@@ -545,3 +545,146 @@ class Query(graphene.ObjectType):
545545 assert result .data == expected
546546
547547 graphene_settings .RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = False
548+
549+
550+ def test_should_query_promise_connectionfields ():
551+ from promise import Promise
552+
553+ class ReporterType (DjangoObjectType ):
554+
555+ class Meta :
556+ model = Reporter
557+ interfaces = (Node , )
558+
559+ class Query (graphene .ObjectType ):
560+ all_reporters = DjangoConnectionField (ReporterType )
561+
562+ def resolve_all_reporters (self , * args , ** kwargs ):
563+ return Promise .resolve ([Reporter (id = 1 )])
564+
565+ schema = graphene .Schema (query = Query )
566+ query = '''
567+ query ReporterPromiseConnectionQuery {
568+ allReporters(first: 1) {
569+ edges {
570+ node {
571+ id
572+ }
573+ }
574+ }
575+ }
576+ '''
577+
578+ expected = {
579+ 'allReporters' : {
580+ 'edges' : [{
581+ 'node' : {
582+ 'id' : 'UmVwb3J0ZXJUeXBlOjE='
583+ }
584+ }]
585+ }
586+ }
587+
588+ result = schema .execute (query )
589+ assert not result .errors
590+ assert result .data == expected
591+
592+
593+ def test_should_query_dataloader_fields ():
594+ from promise import Promise
595+ from promise .dataloader import DataLoader
596+
597+ def article_batch_load_fn (keys ):
598+ queryset = Article .objects .filter (reporter_id__in = keys )
599+ return Promise .resolve ([
600+ [article for article in queryset if article .reporter_id == id ]
601+ for id in keys
602+ ])
603+
604+ article_loader = DataLoader (article_batch_load_fn )
605+
606+ class ArticleType (DjangoObjectType ):
607+
608+ class Meta :
609+ model = Article
610+ interfaces = (Node , )
611+
612+ class ReporterType (DjangoObjectType ):
613+
614+ class Meta :
615+ model = Reporter
616+ interfaces = (Node , )
617+
618+ articles = DjangoConnectionField (ArticleType )
619+
620+ def resolve_articles (self , * args , ** kwargs ):
621+ return article_loader .load (self .id )
622+
623+ class Query (graphene .ObjectType ):
624+ all_reporters = DjangoConnectionField (ReporterType )
625+
626+ r = Reporter .objects .create (
627+ first_name = 'John' ,
628+ last_name = 'Doe' ,
629+ email = 'johndoe@example.com' ,
630+ a_choice = 1
631+ )
632+ Article .objects .create (
633+ headline = 'Article Node 1' ,
634+ pub_date = datetime .date .today (),
635+ reporter = r ,
636+ editor = r ,
637+ lang = 'es'
638+ )
639+ Article .objects .create (
640+ headline = 'Article Node 2' ,
641+ pub_date = datetime .date .today (),
642+ reporter = r ,
643+ editor = r ,
644+ lang = 'en'
645+ )
646+
647+ schema = graphene .Schema (query = Query )
648+ query = '''
649+ query ReporterPromiseConnectionQuery {
650+ allReporters(first: 1) {
651+ edges {
652+ node {
653+ id
654+ articles(first: 2) {
655+ edges {
656+ node {
657+ headline
658+ }
659+ }
660+ }
661+ }
662+ }
663+ }
664+ }
665+ '''
666+
667+ expected = {
668+ 'allReporters' : {
669+ 'edges' : [{
670+ 'node' : {
671+ 'id' : 'UmVwb3J0ZXJUeXBlOjE=' ,
672+ 'articles' : {
673+ 'edges' : [{
674+ 'node' : {
675+ 'headline' : 'Article Node 1' ,
676+ }
677+ }, {
678+ 'node' : {
679+ 'headline' : 'Article Node 2'
680+ }
681+ }]
682+ }
683+ }
684+ }]
685+ }
686+ }
687+
688+ result = schema .execute (query )
689+ assert not result .errors
690+ assert result .data == expected
0 commit comments