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)
Glad you got it working