From de7edaae76b6a1aff7e907b3748d2da4ca5764a1 Mon Sep 17 00:00:00 2001 From: Jason Kraus Date: Tue, 11 Jun 2019 10:29:49 -0700 Subject: [PATCH] expand test case to cover underscores that are sunder, dunder, and general underscore --- graphene_django/converter.py | 10 +++++++++- graphene_django/tests/test_converter.py | 15 ++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 8d18446..99c1ac0 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -36,10 +36,18 @@ def _is_dunder(name): name[-3:-2] != '_') +def _is_sunder(name): + """Returns True if a _sunder_ name, False otherwise.""" + return (len(name) > 2 and + name[0] == name[-1] == '_' and + name[1:2] != '_' and + name[-2:-1] != '_') + + def convert_choice_name(name): name = force_text(name).encode('utf8').decode('ascii', 'ignore') name = to_const(name) - if _is_dunder(name): + if _is_sunder(name) or _is_dunder(name): name = "A%s" % name try: assert_valid_name(name) diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index f79504a..d45d7fb 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -199,8 +199,10 @@ def test_field_with_choices_collision(): def test_field_with_choices_underscore(): field = models.CharField( choices=( - ("_amount__", "Amount"), + ("_amount_", "Amount"), ("__percentage__", "Percentage"), + ("_not_sunder__", "Not Single Underscore"), + ("__not_dunder", "Not Double Underscore"), ), ) @@ -211,12 +213,11 @@ def test_field_with_choices_underscore(): app_label = "test" graphene_type = convert_django_field_with_choices(field) - assert len(graphene_type._meta.enum.__members__) == 2 - assert graphene_type._meta.enum.__members__["_AMOUNT__"].value == "_amount__" - assert graphene_type._meta.enum.__members__["_AMOUNT__"].description == "Amount" - assert graphene_type._meta.enum.__members__["A__PERCENTAGE__"].value == "__percentage__" - assert graphene_type._meta.enum.__members__["A__PERCENTAGE__"].description == "Percentage" - + assert len(graphene_type._meta.enum.__members__) == 4 + assert "A_AMOUNT_" in graphene_type._meta.enum.__members__ + assert "A__PERCENTAGE__" in graphene_type._meta.enum.__members__ + assert "_NOT_SUNDER__" in graphene_type._meta.enum.__members__ + assert "__NOT_DUNDER" in graphene_type._meta.enum.__members__ def test_should_float_convert_float(): assert_conversion(models.FloatField, graphene.Float)