diff --git a/graphene/types/definitions.py b/graphene/types/definitions.py index 4dddaa90..37fa78f5 100644 --- a/graphene/types/definitions.py +++ b/graphene/types/definitions.py @@ -45,8 +45,11 @@ class GrapheneEnumType(GrapheneGraphQLType, GraphQLEnumType): # Try and get enum by value value = enum(value) except ValueError: - # Try ang get enum by name - value = enum[value] + # Try and get enum by name + try: + value = enum[value] + except KeyError: + value = None return super(GrapheneEnumType, self).serialize(value) diff --git a/graphene/types/tests/test_enum.py b/graphene/types/tests/test_enum.py index 7f9fcc4a..a4994246 100644 --- a/graphene/types/tests/test_enum.py +++ b/graphene/types/tests/test_enum.py @@ -321,6 +321,32 @@ def test_enum_resolver_compat(): assert results.data["colorByName"] == Color.RED.name +def test_enum_resolver_invalid(): + from enum import Enum as PyEnum + + class Color(PyEnum): + RED = 1 + GREEN = 2 + BLUE = 3 + + GColor = Enum.from_enum(Color) + + class Query(ObjectType): + color = GColor(required=True) + + def resolve_color(_, info): + return "BLACK" + + schema = Schema(query=Query) + + results = schema.execute("query { color }") + assert results.errors + assert ( + results.errors[0].message + == "Expected a value of type 'Color' but received: 'BLACK'" + ) + + def test_enum_mutation(): from enum import Enum as PyEnum