diff --git a/lib/graphql/schema/argument.rb b/lib/graphql/schema/argument.rb index be2f52c361..c8575b011b 100644 --- a/lib/graphql/schema/argument.rb +++ b/lib/graphql/schema/argument.rb @@ -247,6 +247,9 @@ def coerce_into_values(parent_object, values, context, argument_values) elsif values.key?(arg_key) value = values[arg_key] elsif default_value? + context.schema.error_handler.with_error_handling(context) do + validate_default_value + end value = default_value default_used = true else @@ -297,6 +300,16 @@ def coerce_into_values(parent_object, values, context, argument_values) private + def validate_default_value + return if @default_validated + + coerced_value = default_value.nil? ? nil : type.coerce_isolated_result(default_value) + validation = type.validate_isolated_input(coerced_value) + raise GraphQL::RuntimeTypeError, validation.problems.first["explanation"] unless validation.valid? + + @default_validated = true + end + def validate_input_type(input_type) if input_type.is_a?(String) || input_type.is_a?(GraphQL::Schema::LateBoundType) # Do nothing; assume this will be validated later diff --git a/lib/graphql/schema/member/validates_input.rb b/lib/graphql/schema/member/validates_input.rb index 2f424bf699..57f17b255f 100644 --- a/lib/graphql/schema/member/validates_input.rb +++ b/lib/graphql/schema/member/validates_input.rb @@ -20,6 +20,10 @@ def valid_isolated_input?(v) valid_input?(v, GraphQL::Query::NullContext) end + def validate_isolated_input(v) + validate_input(v, GraphQL::Query::NullContext) + end + def coerce_isolated_input(v) coerce_input(v, GraphQL::Query::NullContext) end