Skip to content
Snippets Groups Projects
Commit aaf6a188 authored by NyanKiyoshi's avatar NyanKiyoshi Committed by Tomás Fox
Browse files

Add tests and rename `optimize_node` to `get_optimized_node`

parent e97d7914
No related branches found
No related tags found
No related merge requests found
......@@ -5,3 +5,4 @@ pytest==4.4.1
pytest-django==3.4.8
pytest-cov==2.6.1
flake8==3.7.7
mock==2.0.0
from .field import field # noqa: F401
from .query import query # noqa: F401
from .resolver import resolver_hints # noqa: F401
from .types import OptimizedDjangoObjectType # noqa: F401
......@@ -7,7 +7,7 @@ class OptimizedDjangoObjectType(DjangoObjectType):
abstract = True
@classmethod
def optimize_node(cls, info, qs, pk):
def get_optimized_node(cls, info, qs, pk):
try:
return query(qs, info).get(pk=pk)
except cls._meta.model.DoesNotExist:
......@@ -15,4 +15,4 @@ class OptimizedDjangoObjectType(DjangoObjectType):
@classmethod
def get_node(cls, info, id):
return cls.optimize_node(info, cls._meta.model.objects, id)
return cls.get_optimized_node(info, cls._meta.model.objects, id)
from django.db.models import Prefetch
import graphene
from graphene_django.fields import DjangoConnectionField
from graphene_django.types import DjangoObjectType
import graphene_django_optimizer as gql_optimizer
from graphene_django_optimizer import OptimizedDjangoObjectType
from .models import (
DetailedItem,
......@@ -58,7 +58,7 @@ class ItemInterface(graphene.Interface):
return getattr(root, 'gql_filtered_children_' + name)
class BaseItemType(DjangoObjectType):
class BaseItemType(OptimizedDjangoObjectType):
title = gql_optimizer.field(
graphene.String(),
only='name',
......@@ -85,12 +85,12 @@ class ItemNode(BaseItemType):
interfaces = (graphene.relay.Node, ItemInterface, )
class SomeOtherItemType(DjangoObjectType):
class SomeOtherItemType(OptimizedDjangoObjectType):
class Meta:
model = SomeOtherItem
class OtherItemType(DjangoObjectType):
class OtherItemType(OptimizedDjangoObjectType):
class Meta:
model = OtherItem
......@@ -123,12 +123,12 @@ class ExtraDetailedItemType(DetailedItemType):
interfaces = (ItemInterface, )
class RelatedOneToManyItemType(DjangoObjectType):
class RelatedOneToManyItemType(OptimizedDjangoObjectType):
class Meta:
model = RelatedOneToManyItem
class UnrelatedModelType(DjangoObjectType):
class UnrelatedModelType(OptimizedDjangoObjectType):
class Meta:
model = UnrelatedModel
interfaces = (DetailedInterface, )
......
import pytest
from mock import patch
from .graphql_utils import create_resolve_info
from .models import (
Item,
)
from .schema import schema, ItemType
@pytest.mark.django_db
@patch('graphene_django_optimizer.types.query', return_value=Item.objects)
def test_should_optimize_the_single_node(mocked_optimizer):
Item.objects.create(id=7)
info = create_resolve_info(schema, '''
query ItemDetails {
items(id: $id) {
id
foo
parent {
id
}
}
}
''')
result = ItemType.get_node(info, 7)
assert result, 'Expected the item to be found and returned'
assert result.pk == 7, 'The item is not the correct one'
mocked_optimizer.assert_called_once_with(Item.objects, info)
@pytest.mark.django_db
@patch('graphene_django_optimizer.types.query')
def test_should_return_none_when_node_is_not_resolved(mocked_optimizer):
Item.objects.create(id=7)
info = create_resolve_info(schema, '''
query {
items(id: $id) {
id
foo
children {
id
foo
}
}
}
''')
qs = Item.objects.filter(name='foo')
mocked_optimizer.return_value = qs
assert ItemType.get_optimized_node(info, qs, 7) is None
mocked_optimizer.assert_called_once_with(qs, info)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment