11import json
22
3- from graphql .error import GraphQLError
3+ from pytest import raises
4+
45from promise import Promise
56
7+ from graphql .error import GraphQLError , GraphQLSyntaxError
8+ from graphql .execution import ExecutionResult
9+
610from graphql_server import (
711 HttpQueryError ,
812 RequestParams ,
1317 load_json_body ,
1418 run_http_query ,
1519)
16- from pytest import raises
1720
1821from .schema import schema
1922from .utils import as_dicts
@@ -529,7 +532,7 @@ def test_batch_allows_post_with_operation_name():
529532 ]
530533
531534
532- def test_get_reponses_using_executor ():
535+ def test_get_responses_using_executor ():
533536 class TestExecutor (object ):
534537 called = False
535538 waited = False
@@ -550,14 +553,18 @@ def execute(self, fn, *args, **kwargs):
550553 schema , "get" , {}, dict (query = query ), executor = TestExecutor (),
551554 )
552555
556+ assert isinstance (results , list )
557+ assert len (results ) == 1
558+ assert isinstance (results [0 ], ExecutionResult )
559+
553560 assert as_dicts (results ) == [{"data" : {"test" : "Hello World" }}]
554561 assert params == [RequestParams (query = query , variables = None , operation_name = None )]
555562 assert TestExecutor .called
556563 assert TestExecutor .waited
557564 assert not TestExecutor .cleaned
558565
559566
560- def test_get_reponses_using_executor_return_promise ():
567+ def test_get_responses_using_executor_return_promise ():
561568 class TestExecutor (object ):
562569 called = False
563570 waited = False
@@ -583,10 +590,61 @@ def execute(self, fn, *args, **kwargs):
583590 return_promise = True ,
584591 )
585592
593+ assert isinstance (result_promises , list )
594+ assert len (result_promises ) == 1
595+ assert isinstance (result_promises [0 ], Promise )
586596 results = Promise .all (result_promises ).get ()
587597
588598 assert as_dicts (results ) == [{"data" : {"test" : "Hello World" }}]
589599 assert params == [RequestParams (query = query , variables = None , operation_name = None )]
590600 assert TestExecutor .called
591601 assert not TestExecutor .waited
592602 assert TestExecutor .cleaned
603+
604+
605+ def test_syntax_error_using_executor_return_promise ():
606+ class TestExecutor (object ):
607+ called = False
608+ waited = False
609+ cleaned = False
610+
611+ def wait_until_finished (self ):
612+ TestExecutor .waited = True
613+
614+ def clean (self ):
615+ TestExecutor .cleaned = True
616+
617+ def execute (self , fn , * args , ** kwargs ):
618+ TestExecutor .called = True
619+ return fn (* args , ** kwargs )
620+
621+ query = "this is a syntax error"
622+ result_promises , params = run_http_query (
623+ schema ,
624+ "get" ,
625+ {},
626+ dict (query = query ),
627+ executor = TestExecutor (),
628+ return_promise = True ,
629+ )
630+
631+ assert isinstance (result_promises , list )
632+ assert len (result_promises ) == 1
633+ assert isinstance (result_promises [0 ], Promise )
634+ results = Promise .all (result_promises ).get ()
635+
636+ assert isinstance (results , list )
637+ assert len (results ) == 1
638+ result = results [0 ]
639+ assert isinstance (result , ExecutionResult )
640+
641+ assert result .data is None
642+ assert isinstance (result .errors , list )
643+ assert len (result .errors ) == 1
644+ error = result .errors [0 ]
645+ assert isinstance (error , GraphQLSyntaxError )
646+
647+ assert params == [RequestParams (query = query , variables = None , operation_name = None )]
648+ assert not TestExecutor .called
649+ assert not TestExecutor .waited
650+ assert not TestExecutor .cleaned
0 commit comments