diff --git a/lib/graphql/subscriptions.rb b/lib/graphql/subscriptions.rb index 1cbf050b00..95ec321c16 100644 --- a/lib/graphql/subscriptions.rb +++ b/lib/graphql/subscriptions.rb @@ -250,6 +250,8 @@ def broadcastable?(query_str, **query_options) def normalize_arguments(event_name, arg_owner, args, context) case arg_owner when GraphQL::Schema::Field, Class + return args if args.nil? + if arg_owner.is_a?(Class) && !arg_owner.kind.input_object? # it's a type, but not an input object return args diff --git a/spec/graphql/subscriptions_spec.rb b/spec/graphql/subscriptions_spec.rb index 9ed2d50220..bb663be367 100644 --- a/spec/graphql/subscriptions_spec.rb +++ b/spec/graphql/subscriptions_spec.rb @@ -1143,5 +1143,22 @@ class Schema < GraphQL::Schema assert_equal(':mySubscription:input:innerInput:', write_subscription_events[0].topic) assert_equal(':mySubscription:input:innerInput:', execute_all_events[0].topic) end + + it 'correctly generates subscription topics when triggering with nil as input value' do + query_str = <<-GRAPHQL + subscription ($input: OuterInput) { + mySubscription (input: $input) { + fullName + } + } + GRAPHQL + + schema.execute(query_str, variables: { 'input' => nil }) + + schema.subscriptions.trigger(:mySubscription, { 'input' => nil }, nil) + + assert_equal(':mySubscription:input:', write_subscription_events[0].topic) + assert_equal(':mySubscription:input:', execute_all_events[0].topic) + end end end