Skip to content

Commit 582958c

Browse files
author
Jacob Foster
committed
Test manual optimization
1 parent 34e6a90 commit 582958c

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

graphene_django/tests/test_optimization.py

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,15 @@
33
from django.test import TestCase
44
from django.test.utils import CaptureQueriesContext
55
import graphene
6-
import pytest
76

8-
from .. import registry
9-
from ..fields import DjangoConnectionField
7+
from ..fields import DjangoConnectionField, DjangoListField
108
from ..optimization import optimize_queryset
119
from ..types import DjangoObjectType
1210
from .models import (
1311
Article as ArticleModel,
14-
Reporter as ReporterModel,
15-
Pet as PetModel
12+
Reporter as ReporterModel
1613
)
1714

18-
pytestmark = pytest.mark.django_db
19-
20-
registry.reset_global_registry()
21-
2215

2316
class Article(DjangoObjectType):
2417
class Meta:
@@ -27,24 +20,36 @@ class Meta:
2720

2821

2922
class Reporter(DjangoObjectType):
23+
favorite_pet = graphene.Field(lambda: Reporter)
24+
3025
class Meta:
3126
model = ReporterModel
27+
#interfaces = (graphene.relay.Node,)
28+
optimizations = {
29+
'favorite_pet': {
30+
'prefetch': ['pets']
31+
}
32+
}
3233

33-
34-
class Pet(DjangoObjectType):
35-
class Meta:
36-
model = PetModel
34+
def resolve_favorite_pet(self, *args):
35+
for pet in self.pets.all():
36+
if pet.last_name == 'Kent':
37+
return pet
3738

3839

3940
class RootQuery(graphene.ObjectType):
4041
article = graphene.Field(Article, id=graphene.ID())
4142
articles = DjangoConnectionField(Article)
43+
reporters = DjangoListField(Reporter)
4244

4345
def resolve_article(self, args, context, info):
4446
qs = ArticleModel.objects
4547
qs = optimize_queryset(ArticleModel, qs, info.field_asts[0])
4648
return qs.get(**args)
4749

50+
def resolve_reporters(self, args, context, info):
51+
return ReporterModel.objects
52+
4853

4954
schema = graphene.Schema(query=RootQuery)
5055

@@ -124,3 +129,25 @@ def test_prefetch_related(self):
124129
assert len(returned_articles) == 2
125130

126131
self.assertEqual(len(query_context.captured_queries), 4)
132+
133+
def test_manual(self):
134+
query = """query {
135+
reporters {
136+
email
137+
favoritePet {
138+
email
139+
}
140+
}
141+
}"""
142+
143+
with CaptureQueriesContext(connection) as query_context:
144+
results = schema.execute(query)
145+
146+
returned_reporters = results.data['reporters']
147+
assert len(returned_reporters) == 2
148+
149+
returned_editor = [reporter for reporter in returned_reporters
150+
if reporter['email'] == self.editor.email][0]
151+
assert returned_editor['favoritePet']['email'] == self.reporter.email
152+
153+
self.assertEqual(len(query_context.captured_queries), 2)

0 commit comments

Comments
 (0)