graphene-django/graphene_django/debug/tests/test_query.py

200 lines
5.2 KiB
Python
Raw Normal View History

import pytest
import graphene
from graphene.relay import Node
from graphene_django import DjangoConnectionField, DjangoObjectType
from ...tests.models import Reporter
from ..middleware import DjangoDebugMiddleware
from ..types import DjangoDebug
class context(object):
pass
2018-07-20 02:51:33 +03:00
# from examples.starwars_django.models import Character
pytestmark = pytest.mark.django_db
def test_should_query_field():
2018-07-20 02:51:33 +03:00
r1 = Reporter(last_name="ABA")
r1.save()
2018-07-20 02:51:33 +03:00
r2 = Reporter(last_name="Griffin")
r2.save()
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
2018-07-20 02:51:33 +03:00
interfaces = (Node,)
class Query(graphene.ObjectType):
reporter = graphene.Field(ReporterType)
2018-07-20 02:51:33 +03:00
debug = graphene.Field(DjangoDebug, name="__debug")
2017-07-28 19:43:27 +03:00
def resolve_reporter(self, info, **args):
return Reporter.objects.first()
2018-07-20 02:51:33 +03:00
query = """
query ReporterQuery {
reporter {
lastName
}
__debug {
sql {
rawSql
}
}
}
2018-07-20 02:51:33 +03:00
"""
expected = {
2018-07-20 02:51:33 +03:00
"reporter": {"lastName": "ABA"},
"__debug": {
"sql": [{"rawSql": str(Reporter.objects.order_by("pk")[:1].query)}]
},
}
2016-09-20 10:08:14 +03:00
schema = graphene.Schema(query=Query)
2018-07-20 02:51:33 +03:00
result = schema.execute(
query, context_value=context(), middleware=[DjangoDebugMiddleware()]
)
assert not result.errors
assert result.data == expected
def test_should_query_list():
2018-07-20 02:51:33 +03:00
r1 = Reporter(last_name="ABA")
r1.save()
2018-07-20 02:51:33 +03:00
r2 = Reporter(last_name="Griffin")
r2.save()
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
2018-07-20 02:51:33 +03:00
interfaces = (Node,)
class Query(graphene.ObjectType):
all_reporters = graphene.List(ReporterType)
2018-07-20 02:51:33 +03:00
debug = graphene.Field(DjangoDebug, name="__debug")
2017-07-28 19:43:27 +03:00
def resolve_all_reporters(self, info, **args):
return Reporter.objects.all()
2018-07-20 02:51:33 +03:00
query = """
query ReporterQuery {
allReporters {
lastName
}
__debug {
sql {
rawSql
}
}
}
2018-07-20 02:51:33 +03:00
"""
expected = {
2018-07-20 02:51:33 +03:00
"allReporters": [{"lastName": "ABA"}, {"lastName": "Griffin"}],
"__debug": {"sql": [{"rawSql": str(Reporter.objects.all().query)}]},
}
2016-09-20 10:08:14 +03:00
schema = graphene.Schema(query=Query)
2018-07-20 02:51:33 +03:00
result = schema.execute(
query, context_value=context(), middleware=[DjangoDebugMiddleware()]
)
assert not result.errors
assert result.data == expected
def test_should_query_connection():
2018-07-20 02:51:33 +03:00
r1 = Reporter(last_name="ABA")
r1.save()
2018-07-20 02:51:33 +03:00
r2 = Reporter(last_name="Griffin")
r2.save()
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
2018-07-20 02:51:33 +03:00
interfaces = (Node,)
class Query(graphene.ObjectType):
all_reporters = DjangoConnectionField(ReporterType)
2018-07-20 02:51:33 +03:00
debug = graphene.Field(DjangoDebug, name="__debug")
2017-07-28 19:43:27 +03:00
def resolve_all_reporters(self, info, **args):
return Reporter.objects.all()
2018-07-20 02:51:33 +03:00
query = """
query ReporterQuery {
allReporters(first:1) {
edges {
node {
lastName
}
}
}
__debug {
sql {
rawSql
}
}
}
2018-07-20 02:51:33 +03:00
"""
expected = {"allReporters": {"edges": [{"node": {"lastName": "ABA"}}]}}
2016-09-20 10:08:14 +03:00
schema = graphene.Schema(query=Query)
2018-07-20 02:51:33 +03:00
result = schema.execute(
query, context_value=context(), middleware=[DjangoDebugMiddleware()]
)
assert not result.errors
2018-07-20 02:51:33 +03:00
assert result.data["allReporters"] == expected["allReporters"]
assert "COUNT" in result.data["__debug"]["sql"][0]["rawSql"]
query = str(Reporter.objects.all()[:1].query)
2018-07-20 02:51:33 +03:00
assert result.data["__debug"]["sql"][1]["rawSql"] == query
def test_should_query_connectionfilter():
from ...filter import DjangoFilterConnectionField
2018-07-20 02:51:33 +03:00
r1 = Reporter(last_name="ABA")
r1.save()
2018-07-20 02:51:33 +03:00
r2 = Reporter(last_name="Griffin")
r2.save()
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
2018-07-20 02:51:33 +03:00
interfaces = (Node,)
class Query(graphene.ObjectType):
2018-07-20 02:51:33 +03:00
all_reporters = DjangoFilterConnectionField(ReporterType, fields=["last_name"])
s = graphene.String(resolver=lambda *_: "S")
2018-07-20 02:51:33 +03:00
debug = graphene.Field(DjangoDebug, name="__debug")
2017-07-28 19:43:27 +03:00
def resolve_all_reporters(self, info, **args):
return Reporter.objects.all()
2018-07-20 02:51:33 +03:00
query = """
query ReporterQuery {
allReporters(first:1) {
edges {
node {
lastName
}
}
}
__debug {
sql {
rawSql
}
}
}
2018-07-20 02:51:33 +03:00
"""
expected = {"allReporters": {"edges": [{"node": {"lastName": "ABA"}}]}}
2016-09-20 10:08:14 +03:00
schema = graphene.Schema(query=Query)
2018-07-20 02:51:33 +03:00
result = schema.execute(
query, context_value=context(), middleware=[DjangoDebugMiddleware()]
)
assert not result.errors
2018-07-20 02:51:33 +03:00
assert result.data["allReporters"] == expected["allReporters"]
assert "COUNT" in result.data["__debug"]["sql"][0]["rawSql"]
query = str(Reporter.objects.all()[:1].query)
2018-07-20 02:51:33 +03:00
assert result.data["__debug"]["sql"][1]["rawSql"] == query