def test_should_query_connectionfields():
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
interfaces = (Node, )
only_fields = ('articles', )
class Query(graphene.ObjectType):
all_reporters = DjangoConnectionField(ReporterType)
def resolve_all_reporters(self, info, **args):
return [Reporter(id=1)]
schema = graphene.Schema(query=Query)
query = '''
query ReporterConnectionQuery {
allReporters {
pageInfo {
hasNextPage
}
edges {
node {
id
}
}
}
}
'''
result = schema.execute(query)
assert not result.errors
assert result.data == {
'allReporters': {
'pageInfo': {
'hasNextPage': False,
},
'edges': [{
'node': {
'id': 'UmVwb3J0ZXJUeXBlOjE='
}
}]
}
}
python类Schema()的实例源码
def test_should_keep_annotations():
from django.db.models import (
Count,
Avg,
)
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
interfaces = (Node, )
only_fields = ('articles', )
class ArticleType(DjangoObjectType):
class Meta:
model = Article
interfaces = (Node, )
filter_fields = ('lang', )
class Query(graphene.ObjectType):
all_reporters = DjangoConnectionField(ReporterType)
all_articles = DjangoConnectionField(ArticleType)
def resolve_all_reporters(self, info, **args):
return Reporter.objects.annotate(articles_c=Count('articles')).order_by('articles_c')
def resolve_all_articles(self, info, **args):
return Article.objects.annotate(import_avg=Avg('importance')).order_by('import_avg')
schema = graphene.Schema(query=Query)
query = '''
query ReporterConnectionQuery {
allReporters {
pageInfo {
hasNextPage
}
edges {
node {
id
}
}
}
allArticles {
pageInfo {
hasNextPage
}
edges {
node {
id
}
}
}
}
'''
result = schema.execute(query)
assert not result.errors
def testNdbObjectType_should_raise_if_model_is_invalid(self):
with self.assertRaises(Exception) as context:
class Character2(NdbObjectType):
class Meta:
model = 1
assert 'not an NDB model' in str(context.exception.message)
# def testNdbObjectType_keyProperty_kindDoesntExist_raisesException(self):
# with self.assertRaises(Exception) as context:
# class ArticleType(NdbObjectType):
# class Meta:
# model = Article
# only_fields = ('prop',)
#
# prop = NdbKeyReferenceField('foo', 'bar')
#
# class QueryType(graphene.ObjectType):
# articles = graphene.List(ArticleType)
#
# @graphene.resolve_only_args
# def resolve_articles(self):
# return Article.query()
#
# schema = graphene.Schema(query=QueryType)
# schema.execute('query test { articles { prop } }')
#
# self.assertIn("Model 'bar' is not accessible by the schema.", str(context.exception.message))
# def testNdbObjectType_keyProperty_stringRepresentation_kindDoesntExist_raisesException(self):
# with self.assertRaises(Exception) as context:
# class ArticleType(NdbObjectType):
# class Meta:
# model = Article
# only_fields = ('prop',)
#
# prop = NdbKeyStringField('foo', 'bar')
#
# class QueryType(graphene.ObjectType):
# articles = graphene.List(ArticleType)
#
# @graphene.resolve_only_args
# def resolve_articles(self):
# return Article.query()
#
# schema = graphene.Schema(query=QueryType)
# schema.execute('query test { articles { prop } }')
#
# self.assertIn("Model 'bar' is not accessible by the schema.", str(context.exception.message))