Skip to content

Commit ce87338

Browse files
committed
Add more tests
1 parent 6a7efe6 commit ce87338

File tree

2 files changed

+86
-3
lines changed

2 files changed

+86
-3
lines changed

lib/graphql/schema/argument.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,12 @@ def coerce_into_values(parent_object, values, context, argument_values)
297297

298298
# @api private
299299
def validate_default_value
300-
coerced_default_value = type.coerce_isolated_result(default_value) unless default_value.nil?
300+
coerced_default_value = begin
301+
type.coerce_isolated_result(default_value) unless default_value.nil?
302+
rescue GraphQL::Schema::Enum::UnresolvedValueError
303+
# It raises this, which is helpful at runtime, but not here...
304+
default_value
305+
end
301306
res = type.valid_isolated_input?(coerced_default_value)
302307
if !res
303308
raise InvalidDefaultValueError.new(self)

spec/graphql/schema/argument_spec.rb

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,51 @@ class InvalidLazyArgumentObject < GraphQL::Schema::Object
415415
assert_equal expected_message, err.message
416416
end
417417

418-
it "TODO: raises when input argument default values are invalid"
418+
it "raises when input argument default values are invalid" do
419+
input_obj = Class.new(GraphQL::Schema::InputObject) do
420+
graphql_name "InputObj"
421+
argument :arg1, [String, null: false], default_value: [nil], required: false
422+
end
423+
424+
query_type = Class.new(GraphQL::Schema::Object) do
425+
graphql_name "Query"
426+
field :f1, Integer, null: false do
427+
argument :input, input_obj, required: true
428+
end
429+
end
430+
431+
err = assert_raises GraphQL::Schema::Argument::InvalidDefaultValueError do
432+
Class.new(GraphQL::Schema) do
433+
query(query_type)
434+
end
435+
end
436+
437+
expected_message = "`InputObj.arg1` has an invalid default value: `[nil]` isn't accepted by `[String!]`; update the default value or the argument type."
438+
assert_equal expected_message, err.message
439+
end
440+
441+
it "raises when directive argument default values are invalid" do
442+
lang = Class.new(GraphQL::Schema::Enum) do
443+
graphql_name "Language"
444+
value "EN"
445+
value "JA"
446+
end
447+
448+
localize = Class.new(GraphQL::Schema::Directive) do
449+
graphql_name "localize"
450+
locations GraphQL::Schema::Directive::FIELD
451+
argument :lang, lang, default_value: "ZH", required: false
452+
end
453+
454+
err = assert_raises GraphQL::Schema::Argument::InvalidDefaultValueError do
455+
Class.new(GraphQL::Schema) do
456+
directive(localize)
457+
end
458+
end
419459

420-
it "TODO: raises when directive argument default values are invalid"
460+
expected_message = "`@localize.lang` has an invalid default value: `\"ZH\"` isn't accepted by `Language`; update the default value or the argument type."
461+
assert_equal expected_message, err.message
462+
end
421463

422464
it "raises when parsing a schema from a string" do
423465
schema_str = <<-GRAPHQL
@@ -431,6 +473,42 @@ class InvalidLazyArgumentObject < GraphQL::Schema::Object
431473
end
432474
expected_message = "`Query.f1.arg1` has an invalid default value: `nil` isn't accepted by `Int!`; update the default value or the argument type."
433475
assert_equal expected_message, err.message
476+
477+
directive_schema_str = <<-GRAPHQL
478+
enum Language {
479+
EN
480+
JA
481+
}
482+
directive @localize(lang: Language = "ZH") on FIELD
483+
484+
type Query {
485+
f1: Int
486+
}
487+
GRAPHQL
488+
489+
490+
err2 = assert_raises GraphQL::Schema::Argument::InvalidDefaultValueError do
491+
GraphQL::Schema.from_definition(directive_schema_str)
492+
end
493+
expected_message = "`@localize.lang` has an invalid default value: `\"ZH\"` isn't accepted by `Language`; update the default value or the argument type."
494+
assert_equal expected_message, err2.message
495+
496+
input_obj_schema_str = <<-GRAPHQL
497+
input InputObj {
498+
arg1: [String!] = [null]
499+
}
500+
501+
type Query {
502+
f1(arg1: InputObj): Int
503+
}
504+
GRAPHQL
505+
506+
507+
err3 = assert_raises GraphQL::Schema::Argument::InvalidDefaultValueError do
508+
GraphQL::Schema.from_definition(input_obj_schema_str)
509+
end
510+
expected_message = "`InputObj.arg1` has an invalid default value: `[nil]` isn't accepted by `[String!]`; update the default value or the argument type."
511+
assert_equal expected_message, err3.message
434512
end
435513
end
436514
end

0 commit comments

Comments
 (0)