diff --git a/lib/graphql/autotest/query_generator.rb b/lib/graphql/autotest/query_generator.rb index 8d705b1..5b6411b 100644 --- a/lib/graphql/autotest/query_generator.rb +++ b/lib/graphql/autotest/query_generator.rb @@ -70,8 +70,20 @@ def generate end private def type_definition(name) - document.definitions.find { |f| f.name == name } + defs = document.definitions.select { |f| f.name == name } + return defs.first if defs.size <= 1 + + MergedDefinition.new(name, defs.flat_map(&:fields)) + end + end + + class MergedDefinition + attr_reader :name, :fields + def initialize(name, fields) + @name = name + @fields = fields end end + private_constant :MergedDefinition end end diff --git a/test/graphql/autotest/query_generator_test.rb b/test/graphql/autotest/query_generator_test.rb index a5af625..a62a213 100644 --- a/test/graphql/autotest/query_generator_test.rb +++ b/test/graphql/autotest/query_generator_test.rb @@ -353,6 +353,30 @@ def test_sub_field_argument_schema GRAPHQL end + def test_extended_type_schema + schema = <<~GRAPHQL + type Item { + title: String! + } + extend type Item { + price: Int! + } + type Query { + item: Item! + } + GRAPHQL + document = GraphQL::parse(schema) + fields = GraphQL::Autotest::QueryGenerator.generate(document: document) + + assert_query [<<~GRAPHQL, '__typename'], fields + item { + price + title + __typename + } + GRAPHQL + end + private def generate(schema:, **kw) GraphQL::Autotest::QueryGenerator.generate(document: schema.to_document, **kw) end