Skip to content

Commit b35b106

Browse files
committed
properly return false from fields with extensions
1 parent 4dbb7a0 commit b35b106

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

lib/graphql/schema/field_extension.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def after_define_apply
132132
# @yieldparam memo [Object] Any extension-specific value which will be passed to {#after_resolve} later
133133
# @return [Object] The return value for this field.
134134
def resolve(object: nil, objects: nil, arguments:, context:)
135-
yield(object || objects, arguments, nil)
135+
yield(object.nil? ? objects : object, arguments, nil)
136136
end
137137

138138
# Called after {#field} was resolved, and after any lazy values (like `Promise`s) were synced,
@@ -149,7 +149,7 @@ def resolve(object: nil, objects: nil, arguments:, context:)
149149
# @param memo [Object] The third value yielded by {#resolve}, or `nil` if there wasn't one
150150
# @return [Object] The return value for this field.
151151
def after_resolve(object: nil, objects: nil, arguments:, context:, values: nil, value: nil, memo:)
152-
value || values
152+
value.nil? ? values : value
153153
end
154154
end
155155
end

spec/graphql/schema/field_extension_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,4 +434,28 @@ def f3(i1:)
434434
assert_equal "f3", res.context[:other_last_ast_node].name
435435
end
436436
end
437+
438+
439+
describe "when returning false from resolve" do
440+
class ReturnFalseSchema < GraphQL::Schema
441+
class EmptyExtension < GraphQL::Schema::FieldExtension
442+
def resolve(object: nil, objects: nil, arguments:, **_rest)
443+
yield(object || objects, arguments)
444+
end
445+
end
446+
447+
class QueryType < GraphQL::Schema::Object
448+
field :is_false, Boolean, extensions: [EmptyExtension], resolve_static: true
449+
def self.is_false(ctx); false; end
450+
def is_false; false; end
451+
end
452+
453+
query QueryType
454+
end
455+
456+
it "is properly returned (not nil)" do
457+
result = ReturnFalseSchema.execute("{ isFalse }")
458+
assert_equal false, result["data"]["isFalse"]
459+
end
460+
end
437461
end

0 commit comments

Comments
 (0)