graphql-dotnet: Enum list in variables not working after migration to v5 (breaking)

Description

Argument of enum list throws parse exception when passed through variables. It works when passed in query directly.

{
  "errors": [
    {
      "message": "GraphQL.Validation.InvalidVariableError: Variable '$types[0]' is invalid. Unable to convert 'PASSENGER_TRANSFER' to 'TransportationTypeEnum'\n ---> System.InvalidOperationException: Unable to convert 'PASSENGER_TRANSFER' to the scalar type 'TransportationTypeEnum'\n   at GraphQL.Types.ScalarGraphType.ThrowValueConversionError(Object value) in /_/src/GraphQL/Types/Scalars/ScalarGraphType.cs:line 235\n   at GraphQL.Types.EnumerationGraphType.ParseValue(Object value) in /_/src/GraphQL/Types/Scalars/Enumeration/EnumerationGraphType.cs:line 81\n   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValueScalar|49_1(ScalarGraphType scalarGraphType, GraphQLVariableDefinition variableDef, VariableName variableName, Object value) in /_/src/GraphQL/Validation/ValidationContext.cs:line 253\n   --- End of inner exception stack trace ---\n   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValueScalar|49_1(ScalarGraphType scalarGraphType, GraphQLVariableDefinition variableDef, VariableName variableName, Object value) in /_/src/GraphQL/Validation/ValidationContext.cs:line 253\n   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValue|49_0(IGraphType type, GraphQLVariableDefinition variableDef, VariableName variableName, Object value, IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 222\n   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValueList|49_2(ListGraphType listGraphType, GraphQLVariableDefinition variableDef, VariableName variableName, Object value, IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 273\n   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValue|49_0(IGraphType type, GraphQLVariableDefinition variableDef, VariableName variableName, Object value, IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 222\n   at GraphQL.Validation.ValidationContext.GetVariableValues(IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 156",
      "locations": [
        {
          "line": 1,
          "column": 11
        }
      ],
      "extensions": {
        "code": "INVALID_VALUE",
        "codes": [
          "INVALID_VALUE",
          "INVALID_OPERATION"
        ],
        "number": "5.8"
      }
    }
  ]
}

Multiline exception, for better readability:

GraphQL.Validation.InvalidVariableError: Variable '$types[0]' is invalid. Unable to convert 'PASSENGER_TRANSFER' to 'TransportationTypeEnum'
 ---> System.InvalidOperationException: Unable to convert 'PASSENGER_TRANSFER' to the scalar type 'TransportationTypeEnum'
   at GraphQL.Types.ScalarGraphType.ThrowValueConversionError(Object value) in /_/src/GraphQL/Types/Scalars/ScalarGraphType.cs:line 235
   at GraphQL.Types.EnumerationGraphType.ParseValue(Object value) in /_/src/GraphQL/Types/Scalars/Enumeration/EnumerationGraphType.cs:line 81
   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValueScalar|49_1(ScalarGraphType scalarGraphType, GraphQLVariableDefinition variableDef, VariableName variableName, Object value) in /_/src/GraphQL/Validation/ValidationContext.cs:line 253
   --- End of inner exception stack trace ---
   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValueScalar|49_1(ScalarGraphType scalarGraphType, GraphQLVariableDefinition variableDef, VariableName variableName, Object value) in /_/src/GraphQL/Validation/ValidationContext.cs:line 253
   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValue|49_0(IGraphType type, GraphQLVariableDefinition variableDef, VariableName variableName, Object value, IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 222
   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValueList|49_2(ListGraphType listGraphType, GraphQLVariableDefinition variableDef, VariableName variableName, Object value, IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 273
   at GraphQL.Validation.ValidationContext.<GetVariableValue>g__ParseValue|49_0(IGraphType type, GraphQLVariableDefinition variableDef, VariableName variableName, Object value, IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 222
   at GraphQL.Validation.ValidationContext.GetVariableValues(IVariableVisitor visitor) in /_/src/GraphQL/Validation/ValidationContext.cs:line 156"

Steps to reproduce

Create enum type e.g. TransportationTypeEnum. Create query with argument of ListGraphType<TransportationTypeEnum> and pass value through variables.

Enum as parameter:

query plansInPeriod($types: [TransportationTypeEnum!]){
  transportationPlans(
    from: "2022-01-03"
    to: "2022-04-20"
    companyId: "bd29c46144934a199729625b6c716975"
    skip: 0
    take: 10 
    types: $types
  ) {
    totalCount
  }
}

Variables (does not work, throws exception, see above):

{
  "types": ["PASSENGER_TRANSFER"]
}

Variables (works when not in array !?!?):

{
  "types": "PASSENGER_TRANSFER"
}

Enum in query (works):

query plansInPeriod($types: [TransportationTypeEnum!]){
  transportationPlans(
    from: "2022-01-03"
    to: "2022-04-20"
    companyId: "bd29c46144934a199729625b6c716975"
    skip: 0
    take: 10 
    types: [PASSENGER_TRANSFER]
  ) {
    totalCount
  }
}

Expected result

Argument should work from variables (it used to work in 4.7.2).

Actual result

Argument parsing fails.

Environment

macOS Monterey 12.3.1, MacBook Pro M1Max

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 19 (11 by maintainers)

Most upvoted comments

Glad you got it working