From 4732b34bd75da985e0e4def90bfc46b65ba303ee Mon Sep 17 00:00:00 2001 From: mvanlonden Date: Tue, 26 Mar 2019 16:50:50 -0500 Subject: [PATCH] add field default value to generated enum --- graphene_django/converter.py | 7 +++++-- graphene_django/tests/test_converter.py | 24 ++++++++++++++++++++---- graphene_django/tests/test_types.py | 2 -- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 8d04739..435d9b6 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -62,8 +62,11 @@ def convert_django_field_with_choices(field, registry=None): meta = field.model._meta name = to_camel_case("{}_{}".format(meta.object_name, field.name)) choices = list(get_choices(choices)) - if field.blank: - choices.append(('EMPTY', '', '')) + default = field.get_default() + if default: + choices_include_default = bool([choice for choice in field.choices if choice[0] == default]) + if not choices_include_default: + choices.append(('DEFAULT', default, 'default value')) named_choices = [(c[0], c[1]) for c in choices] named_choices_descriptions = {c[0]: c[2] for c in choices} diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index e44ecb9..3577092 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -196,9 +196,9 @@ def test_field_with_choices_collision(): convert_django_field_with_choices(field) -def test_field_with_blank(): +def test_field_with_choices_and_default(): field = models.CharField( - help_text="Language", choices=(("es", "Spanish"), ("en", "English")), blank=True + help_text="Language", choices=(("es", "Spanish"), ("en", "English")), default="nl" ) class TranslatedModel(models.Model): @@ -208,8 +208,24 @@ def test_field_with_blank(): app_label = "test" graphene_type = convert_django_field_with_choices(field) - assert graphene_type._meta.enum.__members__["EMPTY"].value == "" - assert graphene_type._meta.enum.__members__["EMPTY"].description == "" + assert graphene_type._meta.enum.__members__["DEFAULT"].value == "nl" + assert graphene_type._meta.enum.__members__["DEFAULT"].description == "default value" + + +def test_field_with_default_in_choices(): + field = models.CharField( + help_text="Language", choices=(("es", "Spanish"), ("en", "English")), default="es" + ) + + class TranslatedModel(models.Model): + language = field + + class Meta: + app_label = "test" + + graphene_type = convert_django_field_with_choices(field) + + assert "DEFAULT" not in graphene_type._meta.enum.__members__ def test_should_float_convert_float(): diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 0f18123..8a8643b 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -138,7 +138,6 @@ type ArticleEdge { enum ArticleImportance { A_1 A_2 - EMPTY } enum ArticleLang { @@ -180,7 +179,6 @@ enum ReporterAChoice { enum ReporterReporterType { A_1 A_2 - EMPTY } type RootQuery {