def test_synchronous_executor_doesnt_support_defers():
    class Data(object):
        def promise(self):
            return succeed('i shouldn\'nt work')

        def notPromise(self):
            return 'i should work'

    DataType = GraphQLObjectType(
        'DataType', {
            'promise': GraphQLField(GraphQLNonNull(GraphQLString)),
            'notPromise': GraphQLField(GraphQLString),
        })
    doc = '''
    query Example {
        promise
        notPromise
    }
    '''
    schema = GraphQLSchema(query=DataType)
    executor = Executor([SynchronousExecutionMiddleware()])

    result = executor.execute(schema, doc, Data(), operation_name='Example')
    assert not isinstance(result, Deferred)
    assert result.data is None
    formatted_errors = list(map(format_error, result.errors))
    assert formatted_errors == [{
        'locations': [dict(line=3, column=9)],
        'message':
        'You cannot return a Deferred from a resolver '
        'when using SynchronousExecutionMiddleware'
    }]
def test_synchronous_executor_will_synchronously_resolve():
    class Data(object):
        def promise(self):
            return 'I should work'

    DataType = GraphQLObjectType('DataType', {
        'promise': GraphQLField(GraphQLString),
    })
    doc = '''
    query Example {
        promise
    }
    '''
    schema = GraphQLSchema(query=DataType)
    executor = Executor([SynchronousExecutionMiddleware()])

    result = executor.execute(schema, doc, Data(), operation_name='Example')
    assert not isinstance(result, Deferred)
    assert result.data == {"promise": 'I should work'}
    assert not result.errors
Esempio n. 3
0
 def executor(self):
     if not self._executor:
         self._executor = Executor([SynchronousExecutionMiddleware()],
                                   map_type=OrderedDict)
     return self._executor