mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 12:44:15 +03:00
Improved Django fields testing
This commit is contained in:
parent
d47f1d544e
commit
2f3bfdf863
|
@ -25,6 +25,7 @@ from graphene.core.fields import (
|
||||||
IDField,
|
IDField,
|
||||||
ListField,
|
ListField,
|
||||||
NonNullField,
|
NonNullField,
|
||||||
|
FloatField,
|
||||||
)
|
)
|
||||||
|
|
||||||
from graphene.decorators import (
|
from graphene.decorators import (
|
||||||
|
|
|
@ -13,7 +13,7 @@ from graphene.contrib.django.fields import ConnectionOrListField, DjangoModelFie
|
||||||
|
|
||||||
|
|
||||||
@singledispatch
|
@singledispatch
|
||||||
def convert_django_field(field, cls):
|
def convert_django_field(field):
|
||||||
raise Exception(
|
raise Exception(
|
||||||
"Don't know how to convert the Django field %s (%s)" % (field, field.__class__))
|
"Don't know how to convert the Django field %s (%s)" % (field, field.__class__))
|
||||||
|
|
||||||
|
@ -25,12 +25,12 @@ def convert_django_field(field, cls):
|
||||||
@convert_django_field.register(models.SlugField)
|
@convert_django_field.register(models.SlugField)
|
||||||
@convert_django_field.register(models.URLField)
|
@convert_django_field.register(models.URLField)
|
||||||
@convert_django_field.register(models.UUIDField)
|
@convert_django_field.register(models.UUIDField)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return StringField(description=field.description)
|
return StringField(description=field.description)
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.AutoField)
|
@convert_django_field.register(models.AutoField)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return IDField(description=field.description)
|
return IDField(description=field.description)
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,33 +39,33 @@ def _(field, cls):
|
||||||
@convert_django_field.register(models.SmallIntegerField)
|
@convert_django_field.register(models.SmallIntegerField)
|
||||||
@convert_django_field.register(models.BigIntegerField)
|
@convert_django_field.register(models.BigIntegerField)
|
||||||
@convert_django_field.register(models.IntegerField)
|
@convert_django_field.register(models.IntegerField)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return IntField(description=field.description)
|
return IntField(description=field.description)
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.BooleanField)
|
@convert_django_field.register(models.BooleanField)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return BooleanField(description=field.description, null=False)
|
return BooleanField(description=field.description, null=False)
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.NullBooleanField)
|
@convert_django_field.register(models.NullBooleanField)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return BooleanField(description=field.description)
|
return BooleanField(description=field.description, null=True)
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.FloatField)
|
@convert_django_field.register(models.FloatField)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return FloatField(description=field.description)
|
return FloatField(description=field.description)
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.ManyToManyField)
|
@convert_django_field.register(models.ManyToManyField)
|
||||||
@convert_django_field.register(models.ManyToOneRel)
|
@convert_django_field.register(models.ManyToOneRel)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
model_field = DjangoModelField(field.related_model)
|
model_field = DjangoModelField(field.related_model)
|
||||||
return ConnectionOrListField(model_field)
|
return ConnectionOrListField(model_field)
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.OneToOneField)
|
@convert_django_field.register(models.OneToOneField)
|
||||||
@convert_django_field.register(models.ForeignKey)
|
@convert_django_field.register(models.ForeignKey)
|
||||||
def _(field, cls):
|
def _(field):
|
||||||
return DjangoModelField(field.related_model, description=field.description)
|
return DjangoModelField(field.related_model, description=field.description)
|
||||||
|
|
|
@ -33,7 +33,7 @@ class DjangoObjectTypeMeta(ObjectTypeMeta):
|
||||||
# We skip this field if we specify only_fields and is not
|
# We skip this field if we specify only_fields and is not
|
||||||
# in there. Or when we excldue this field in exclude_fields
|
# in there. Or when we excldue this field in exclude_fields
|
||||||
continue
|
continue
|
||||||
converted_field = convert_django_field(field, cls)
|
converted_field = convert_django_field(field)
|
||||||
cls.add_to_class(field.name, converted_field)
|
cls.add_to_class(field.name, converted_field)
|
||||||
|
|
||||||
|
|
||||||
|
|
105
tests/contrib_django/test_converter.py
Normal file
105
tests/contrib_django/test_converter.py
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
from py.test import raises
|
||||||
|
from collections import namedtuple
|
||||||
|
from pytest import raises
|
||||||
|
import graphene
|
||||||
|
from graphene import relay
|
||||||
|
from graphene.contrib.django.converter import (
|
||||||
|
convert_django_field
|
||||||
|
)
|
||||||
|
from graphene.contrib.django.fields import (
|
||||||
|
ConnectionOrListField,
|
||||||
|
DjangoModelField
|
||||||
|
)
|
||||||
|
from django.db import models
|
||||||
|
from .models import Article, Reporter
|
||||||
|
|
||||||
|
|
||||||
|
def assert_conversion(django_field, graphene_field, *args):
|
||||||
|
field = django_field(*args)
|
||||||
|
graphene_type = convert_django_field(field)
|
||||||
|
assert isinstance(graphene_type, graphene_field)
|
||||||
|
return graphene_type
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_unknown_django_field_raise_exception():
|
||||||
|
with raises(Exception) as excinfo:
|
||||||
|
convert_django_field(None)
|
||||||
|
assert 'Don\'t know how to convert the Django field' in str(excinfo.value)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_date_convert_string():
|
||||||
|
assert_conversion(models.DateField, graphene.StringField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_char_convert_string():
|
||||||
|
assert_conversion(models.CharField, graphene.StringField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_text_convert_string():
|
||||||
|
assert_conversion(models.TextField, graphene.StringField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_email_convert_string():
|
||||||
|
assert_conversion(models.EmailField, graphene.StringField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_slug_convert_string():
|
||||||
|
assert_conversion(models.SlugField, graphene.StringField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_url_convert_string():
|
||||||
|
assert_conversion(models.URLField, graphene.StringField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_auto_convert_id():
|
||||||
|
assert_conversion(models.AutoField, graphene.IDField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_positive_integer_convert_int():
|
||||||
|
assert_conversion(models.PositiveIntegerField, graphene.IntField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_positive_small_convert_int():
|
||||||
|
assert_conversion(models.PositiveSmallIntegerField, graphene.IntField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_small_integer_convert_int():
|
||||||
|
assert_conversion(models.SmallIntegerField, graphene.IntField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_big_integer_convert_int():
|
||||||
|
assert_conversion(models.BigIntegerField, graphene.IntField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_integer_convert_int():
|
||||||
|
assert_conversion(models.IntegerField, graphene.IntField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_boolean_convert_boolean():
|
||||||
|
assert_conversion(models.BooleanField, graphene.BooleanField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_nullboolean_convert_boolean():
|
||||||
|
field = assert_conversion(models.NullBooleanField, graphene.BooleanField)
|
||||||
|
assert field.null == True
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_float_convert_float():
|
||||||
|
assert_conversion(models.FloatField, graphene.FloatField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_manytomany_convert_connectionorlist():
|
||||||
|
field = assert_conversion(models.ManyToManyField, ConnectionOrListField, Article)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_manytoone_convert_connectionorlist():
|
||||||
|
graphene_type = convert_django_field(Reporter.articles.related)
|
||||||
|
assert isinstance(graphene_type, ConnectionOrListField)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_onetoone_convert_model():
|
||||||
|
assert_conversion(models.OneToOneField, DjangoModelField, Article)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_onetoone_convert_model():
|
||||||
|
assert_conversion(models.ForeignKey, DjangoModelField, Article)
|
Loading…
Reference in New Issue
Block a user