From d2b4963946b071e73de68a4e418c6540ba9a3e36 Mon Sep 17 00:00:00 2001 From: takeyoda Date: Mon, 24 Jul 2023 21:09:46 +0900 Subject: [PATCH] Add support for Type extension (extend type XXX) --- lib/graphql/autotest/query_generator.rb | 14 ++++++++++- test/graphql/autotest/query_generator_test.rb | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) 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