diff --git a/graphene/pyutils/enum.py b/graphene/pyutils/enum.py index 8c09a6ad..928d0be2 100644 --- a/graphene/pyutils/enum.py +++ b/graphene/pyutils/enum.py @@ -71,18 +71,18 @@ def _is_descriptor(obj): def _is_dunder(name): """Returns True if a __dunder__ name, False otherwise.""" - return (name[:2] == name[-2:] == '__' and + return (len(name) > 4 and + name[:2] == name[-2:] == '__' and name[2:3] != '_' and - name[-3:-2] != '_' and - len(name) > 4) + name[-3:-2] != '_') def _is_sunder(name): """Returns True if a _sunder_ name, False otherwise.""" - return (name[0] == name[-1] == '_' and + return (len(name) > 2 and + name[0] == name[-1] == '_' and name[1:2] != '_' and - name[-2:-1] != '_' and - len(name) > 2) + name[-2:-1] != '_') def _make_class_unpicklable(cls): diff --git a/graphene/pyutils/tests/__init__.py b/graphene/pyutils/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/graphene/pyutils/tests/test_enum.py b/graphene/pyutils/tests/test_enum.py new file mode 100644 index 00000000..bf15a620 --- /dev/null +++ b/graphene/pyutils/tests/test_enum.py @@ -0,0 +1,41 @@ +from ..enum import _is_dunder, _is_sunder + + +def test__is_dunder(): + dunder_names = [ + '__i__', + '__test__', + ] + non_dunder_names = [ + 'test', + '__test', + '_test', + '_test_', + 'test__', + '', + ] + + for name in dunder_names: + assert _is_dunder(name) is True + + for name in non_dunder_names: + assert _is_dunder(name) is False + +def test__is_sunder(): + sunder_names = [ + '_i_', + '_test_', + ] + + non_sunder_names = [ + '__i__', + '_i__', + '__i_', + '', + ] + + for name in sunder_names: + assert _is_sunder(name) is True + + for name in non_sunder_names: + assert _is_sunder(name) is False