graphql 1.7.14 → 1.8.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/generators/graphql/function_generator.rb +1 -1
- data/lib/generators/graphql/loader_generator.rb +1 -1
- data/lib/generators/graphql/mutation_generator.rb +1 -6
- data/lib/generators/graphql/templates/function.erb +2 -2
- data/lib/generators/graphql/templates/loader.erb +2 -2
- data/lib/graphql.rb +2 -0
- data/lib/graphql/argument.rb +0 -1
- data/lib/graphql/backwards_compatibility.rb +2 -3
- data/lib/graphql/base_type.rb +18 -16
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -117
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -14
- data/lib/graphql/define/assign_object_field.rb +5 -12
- data/lib/graphql/deprecated_dsl.rb +28 -0
- data/lib/graphql/directive.rb +0 -1
- data/lib/graphql/enum_type.rb +1 -3
- data/lib/graphql/execution.rb +0 -1
- data/lib/graphql/execution/multiplex.rb +29 -12
- data/lib/graphql/field.rb +5 -20
- data/lib/graphql/function.rb +12 -0
- data/lib/graphql/input_object_type.rb +1 -3
- data/lib/graphql/internal_representation/node.rb +14 -26
- data/lib/graphql/internal_representation/visit.rb +6 -3
- data/lib/graphql/introspection/arguments_field.rb +0 -1
- data/lib/graphql/introspection/enum_values_field.rb +0 -1
- data/lib/graphql/introspection/fields_field.rb +0 -1
- data/lib/graphql/introspection/input_fields_field.rb +0 -1
- data/lib/graphql/introspection/interfaces_field.rb +0 -1
- data/lib/graphql/introspection/of_type_field.rb +0 -1
- data/lib/graphql/introspection/possible_types_field.rb +0 -1
- data/lib/graphql/introspection/schema_field.rb +0 -1
- data/lib/graphql/introspection/type_by_name_field.rb +0 -1
- data/lib/graphql/introspection/typename_field.rb +0 -1
- data/lib/graphql/language.rb +0 -3
- data/lib/graphql/language/generation.rb +182 -3
- data/lib/graphql/language/lexer.rb +69 -144
- data/lib/graphql/language/lexer.rl +4 -15
- data/lib/graphql/language/nodes.rb +76 -136
- data/lib/graphql/language/parser.rb +621 -668
- data/lib/graphql/language/parser.y +11 -17
- data/lib/graphql/language/token.rb +3 -10
- data/lib/graphql/object_type.rb +6 -1
- data/lib/graphql/query.rb +13 -8
- data/lib/graphql/query/arguments.rb +33 -48
- data/lib/graphql/query/context.rb +1 -0
- data/lib/graphql/query/literal_input.rb +1 -4
- data/lib/graphql/relay/connection_resolve.rb +3 -0
- data/lib/graphql/relay/global_id_resolve.rb +5 -1
- data/lib/graphql/relay/relation_connection.rb +19 -14
- data/lib/graphql/schema.rb +219 -12
- data/lib/graphql/schema/argument.rb +33 -0
- data/lib/graphql/schema/build_from_definition.rb +18 -64
- data/lib/graphql/schema/enum.rb +76 -0
- data/lib/graphql/schema/field.rb +127 -0
- data/lib/graphql/schema/field/dynamic_resolve.rb +63 -0
- data/lib/graphql/schema/field/unwrapped_resolve.rb +20 -0
- data/lib/graphql/schema/input_object.rb +61 -0
- data/lib/graphql/schema/interface.rb +32 -0
- data/lib/graphql/schema/loader.rb +2 -2
- data/lib/graphql/schema/member.rb +97 -0
- data/lib/graphql/schema/member/build_type.rb +106 -0
- data/lib/graphql/schema/member/has_fields.rb +56 -0
- data/lib/graphql/schema/member/instrumentation.rb +113 -0
- data/lib/graphql/schema/member/list_type_proxy.rb +21 -0
- data/lib/graphql/schema/member/non_null_type_proxy.rb +21 -0
- data/lib/graphql/schema/object.rb +65 -0
- data/lib/graphql/schema/printer.rb +266 -33
- data/lib/graphql/schema/scalar.rb +25 -0
- data/lib/graphql/schema/traversal.rb +26 -17
- data/lib/graphql/schema/union.rb +48 -0
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +8 -15
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +1 -11
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +5 -7
- data/lib/graphql/tracing.rb +0 -1
- data/lib/graphql/tracing/platform_tracing.rb +7 -20
- data/lib/graphql/tracing/scout_tracing.rb +2 -2
- data/lib/graphql/unresolved_type_error.rb +2 -3
- data/lib/graphql/version.rb +1 -1
- data/readme.md +1 -1
- data/spec/dummy/app/channels/graphql_channel.rb +1 -22
- data/spec/dummy/log/development.log +0 -239
- data/spec/dummy/log/test.log +0 -204
- data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -4
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
- data/spec/generators/graphql/function_generator_spec.rb +0 -26
- data/spec/generators/graphql/loader_generator_spec.rb +0 -24
- data/spec/graphql/analysis/max_query_complexity_spec.rb +3 -3
- data/spec/graphql/analysis/max_query_depth_spec.rb +3 -3
- data/spec/graphql/backtrace_spec.rb +0 -10
- data/spec/graphql/base_type_spec.rb +5 -19
- data/spec/graphql/boolean_type_spec.rb +3 -3
- data/spec/graphql/directive_spec.rb +1 -3
- data/spec/graphql/enum_type_spec.rb +5 -18
- data/spec/graphql/execution/execute_spec.rb +1 -1
- data/spec/graphql/execution/multiplex_spec.rb +2 -2
- data/spec/graphql/float_type_spec.rb +2 -2
- data/spec/graphql/id_type_spec.rb +1 -1
- data/spec/graphql/input_object_type_spec.rb +2 -15
- data/spec/graphql/int_type_spec.rb +2 -2
- data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
- data/spec/graphql/introspection/schema_type_spec.rb +0 -1
- data/spec/graphql/language/generation_spec.rb +186 -21
- data/spec/graphql/language/lexer_spec.rb +1 -21
- data/spec/graphql/language/nodes_spec.rb +12 -21
- data/spec/graphql/language/parser_spec.rb +1 -1
- data/spec/graphql/query/arguments_spec.rb +15 -37
- data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -2
- data/spec/graphql/query/variables_spec.rb +1 -1
- data/spec/graphql/query_spec.rb +5 -31
- data/spec/graphql/rake_task_spec.rb +1 -3
- data/spec/graphql/relay/base_connection_spec.rb +1 -1
- data/spec/graphql/relay/connection_instrumentation_spec.rb +2 -2
- data/spec/graphql/relay/connection_resolve_spec.rb +1 -1
- data/spec/graphql/relay/connection_type_spec.rb +1 -1
- data/spec/graphql/relay/mutation_spec.rb +3 -3
- data/spec/graphql/relay/relation_connection_spec.rb +1 -65
- data/spec/graphql/schema/build_from_definition_spec.rb +4 -86
- data/spec/graphql/schema/enum_spec.rb +60 -0
- data/spec/graphql/schema/field_spec.rb +14 -0
- data/spec/graphql/schema/input_object_spec.rb +43 -0
- data/spec/graphql/schema/interface_spec.rb +98 -0
- data/spec/graphql/schema/object_spec.rb +119 -0
- data/spec/graphql/schema/printer_spec.rb +15 -92
- data/spec/graphql/schema/scalar_spec.rb +40 -0
- data/spec/graphql/schema/union_spec.rb +35 -0
- data/spec/graphql/schema/validation_spec.rb +1 -1
- data/spec/graphql/schema/warden_spec.rb +11 -11
- data/spec/graphql/schema_spec.rb +25 -23
- data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +2 -10
- data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
- data/spec/graphql/string_type_spec.rb +3 -3
- data/spec/graphql/subscriptions_spec.rb +1 -1
- data/spec/graphql/tracing/platform_tracing_spec.rb +1 -60
- data/spec/support/dummy/schema.rb +25 -39
- data/spec/support/jazz.rb +334 -0
- data/spec/support/lazy_helpers.rb +21 -23
- data/spec/support/star_wars/data.rb +7 -6
- data/spec/support/star_wars/schema.rb +109 -142
- metadata +39 -33
- data/lib/graphql/execution/instrumentation.rb +0 -82
- data/lib/graphql/language/block_string.rb +0 -47
- data/lib/graphql/language/document_from_schema_definition.rb +0 -277
- data/lib/graphql/language/printer.rb +0 -351
- data/lib/graphql/tracing/data_dog_tracing.rb +0 -49
- data/spec/graphql/execution/instrumentation_spec.rb +0 -165
- data/spec/graphql/language/block_string_spec.rb +0 -70
- data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
- data/spec/graphql/language/printer_spec.rb +0 -203
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe GraphQL::Schema::Field do
|
5
|
+
describe "graphql definition" do
|
6
|
+
let(:object_class) { Jazz::Query }
|
7
|
+
let(:field) { object_class.fields.find { |f| f.name == "find" } }
|
8
|
+
|
9
|
+
it "uses the argument class" do
|
10
|
+
arg_defn = field.graphql_definition.arguments.values.first
|
11
|
+
assert_equal :ok, arg_defn.metadata[:custom]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe GraphQL::Schema::InputObject do
|
5
|
+
let(:input_object) { Jazz::EnsembleInput }
|
6
|
+
describe "type info" do
|
7
|
+
it "has it" do
|
8
|
+
assert_equal "EnsembleInput", input_object.graphql_name
|
9
|
+
assert_equal nil, input_object.description
|
10
|
+
assert_equal 1, input_object.arguments.size
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".to_graphql" do
|
15
|
+
it "assigns itself as the arguments_class" do
|
16
|
+
assert_equal input_object, input_object.to_graphql.arguments_class
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "in queries" do
|
21
|
+
it "is passed to the field method" do
|
22
|
+
query_str = <<-GRAPHQL
|
23
|
+
{
|
24
|
+
inspectInput(input: {
|
25
|
+
stringValue: "ABC",
|
26
|
+
legacyInput: { intValue: 4 },
|
27
|
+
nestedInput: { stringValue: "xyz"}
|
28
|
+
})
|
29
|
+
}
|
30
|
+
GRAPHQL
|
31
|
+
|
32
|
+
res = Jazz::Schema.execute(query_str, context: { message: "hi" })
|
33
|
+
expected_info = [
|
34
|
+
"Jazz::InspectableInput",
|
35
|
+
"hi, ABC, 4, (hi, xyz, -, (-))",
|
36
|
+
"ABC",
|
37
|
+
"ABC",
|
38
|
+
"ABC",
|
39
|
+
]
|
40
|
+
assert_equal expected_info, res["data"]["inspectInput"]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe GraphQL::Schema::Interface do
|
5
|
+
let(:interface) { Jazz::GloballyIdentifiableType }
|
6
|
+
|
7
|
+
describe "type info" do
|
8
|
+
it "tells its type info" do
|
9
|
+
assert_equal "GloballyIdentifiable", interface.graphql_name
|
10
|
+
assert_equal 2, interface.fields.size
|
11
|
+
end
|
12
|
+
|
13
|
+
class NewInterface1 < Jazz::GloballyIdentifiableType
|
14
|
+
end
|
15
|
+
|
16
|
+
class NewInterface2 < Jazz::GloballyIdentifiableType
|
17
|
+
module Implementation
|
18
|
+
def new_method
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "can override Implementation" do
|
24
|
+
|
25
|
+
new_object_1 = Class.new(GraphQL::Schema::Object) do
|
26
|
+
implements NewInterface1
|
27
|
+
end
|
28
|
+
|
29
|
+
assert_equal 2, new_object_1.fields.size
|
30
|
+
assert new_object_1.method_defined?(:id)
|
31
|
+
|
32
|
+
new_object_2 = Class.new(GraphQL::Schema::Object) do
|
33
|
+
implements NewInterface2
|
34
|
+
end
|
35
|
+
|
36
|
+
assert_equal 2, new_object_2.fields.size
|
37
|
+
# It got the new method
|
38
|
+
assert new_object_2.method_defined?(:new_method)
|
39
|
+
# But not the old method
|
40
|
+
refute new_object_2.method_defined?(:id)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe ".to_graphql" do
|
45
|
+
it "creates an InterfaceType" do
|
46
|
+
interface_type = interface.to_graphql
|
47
|
+
assert_equal "GloballyIdentifiable", interface_type.name
|
48
|
+
field = interface_type.all_fields.first
|
49
|
+
assert_equal "id", field.name
|
50
|
+
assert_equal GraphQL::ID_TYPE.to_non_null_type, field.type
|
51
|
+
assert_equal "A unique identifier for this object", field.description
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "in queries" do
|
56
|
+
it "works" do
|
57
|
+
query_str = <<-GRAPHQL
|
58
|
+
{
|
59
|
+
piano: find(id: "Instrument/Piano") {
|
60
|
+
id
|
61
|
+
upcasedId
|
62
|
+
... on Instrument {
|
63
|
+
family
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
GRAPHQL
|
68
|
+
|
69
|
+
res = Jazz::Schema.execute(query_str)
|
70
|
+
expected_piano = {
|
71
|
+
"id" => "Instrument/Piano",
|
72
|
+
"upcasedId" => "INSTRUMENT/PIANO",
|
73
|
+
"family" => "KEYS",
|
74
|
+
}
|
75
|
+
assert_equal(expected_piano, res["data"]["piano"])
|
76
|
+
end
|
77
|
+
|
78
|
+
it "applies custom field attributes" do
|
79
|
+
query_str = <<-GRAPHQL
|
80
|
+
{
|
81
|
+
find(id: "Ensemble/Bela Fleck and the Flecktones") {
|
82
|
+
upcasedId
|
83
|
+
... on Ensemble {
|
84
|
+
name
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
GRAPHQL
|
89
|
+
|
90
|
+
res = Jazz::Schema.execute(query_str)
|
91
|
+
expected_data = {
|
92
|
+
"upcasedId" => "ENSEMBLE/BELA FLECK AND THE FLECKTONES",
|
93
|
+
"name" => "Bela Fleck and the Flecktones"
|
94
|
+
}
|
95
|
+
assert_equal(expected_data, res["data"]["find"])
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe GraphQL::Schema::Object do
|
5
|
+
describe "class attributes" do
|
6
|
+
let(:object_class) { Jazz::Ensemble }
|
7
|
+
it "tells type data" do
|
8
|
+
assert_equal "Ensemble", object_class.graphql_name
|
9
|
+
assert_equal "A group of musicians playing together", object_class.description
|
10
|
+
assert_equal 5, object_class.fields.size
|
11
|
+
assert_equal 2, object_class.interfaces.size
|
12
|
+
# Compatibility methods are delegated to the underlying BaseType
|
13
|
+
assert object_class.respond_to?(:connection_type)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "inherits fields and interfaces" do
|
17
|
+
new_object_class = Class.new(object_class) do
|
18
|
+
field :newField, String, null: true
|
19
|
+
field :name, String, "The new description", null: true
|
20
|
+
end
|
21
|
+
|
22
|
+
# one more than the parent class
|
23
|
+
assert_equal 6, new_object_class.fields.size
|
24
|
+
# inherited interfaces are present
|
25
|
+
assert_equal 2, new_object_class.interfaces.size
|
26
|
+
# The new field is present
|
27
|
+
assert new_object_class.fields.find { |f| f.name == "newField" }
|
28
|
+
# The overridden field is present:
|
29
|
+
name_field = new_object_class.fields.find { |f| f.name == "name" }
|
30
|
+
assert_equal "The new description", name_field.description
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe ".to_graphql_type" do
|
35
|
+
let(:obj_type) { Jazz::Ensemble.to_graphql }
|
36
|
+
it "returns a matching GraphQL::ObjectType" do
|
37
|
+
assert_equal "Ensemble", obj_type.name
|
38
|
+
assert_equal "A group of musicians playing together", obj_type.description
|
39
|
+
assert_equal 5, obj_type.all_fields.size
|
40
|
+
|
41
|
+
name_field = obj_type.all_fields[2]
|
42
|
+
assert_equal "name", name_field.name
|
43
|
+
assert_equal GraphQL::STRING_TYPE.to_non_null_type, name_field.type
|
44
|
+
assert_equal nil, name_field.description
|
45
|
+
end
|
46
|
+
|
47
|
+
it "has a custom implementation" do
|
48
|
+
assert_equal obj_type.metadata[:config], :configged
|
49
|
+
end
|
50
|
+
|
51
|
+
it "uses the custom field class" do
|
52
|
+
query_str = <<-GRAPHQL
|
53
|
+
{
|
54
|
+
ensembles { upcaseName }
|
55
|
+
}
|
56
|
+
GRAPHQL
|
57
|
+
|
58
|
+
res = Jazz::Schema.execute(query_str)
|
59
|
+
assert_equal ["BELA FLECK AND THE FLECKTONES"], res["data"]["ensembles"].map { |e| e["upcaseName"] }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
describe "in queries" do
|
65
|
+
after {
|
66
|
+
Jazz::Models.reset
|
67
|
+
}
|
68
|
+
|
69
|
+
it "returns data" do
|
70
|
+
query_str = <<-GRAPHQL
|
71
|
+
{
|
72
|
+
ensembles { name }
|
73
|
+
instruments { name }
|
74
|
+
}
|
75
|
+
GRAPHQL
|
76
|
+
res = Jazz::Schema.execute(query_str)
|
77
|
+
assert_equal [{"name" => "Bela Fleck and the Flecktones"}], res["data"]["ensembles"]
|
78
|
+
assert_equal({"name" => "Banjo"}, res["data"]["instruments"].first)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "does mutations" do
|
82
|
+
mutation_str = <<-GRAPHQL
|
83
|
+
mutation AddEnsemble($name: String!) {
|
84
|
+
addEnsemble(input: { name: $name }) {
|
85
|
+
id
|
86
|
+
}
|
87
|
+
}
|
88
|
+
GRAPHQL
|
89
|
+
|
90
|
+
query_str = <<-GRAPHQL
|
91
|
+
query($id: ID!) {
|
92
|
+
find(id: $id) {
|
93
|
+
... on Ensemble {
|
94
|
+
name
|
95
|
+
}
|
96
|
+
}
|
97
|
+
}
|
98
|
+
GRAPHQL
|
99
|
+
|
100
|
+
res = Jazz::Schema.execute(mutation_str, variables: { "name" => "Miles Davis Quartet" })
|
101
|
+
new_id = res["data"]["addEnsemble"]["id"]
|
102
|
+
|
103
|
+
res2 = Jazz::Schema.execute(query_str, variables: { "id" => new_id })
|
104
|
+
assert_equal "Miles Davis Quartet", res2["data"]["find"]["name"]
|
105
|
+
end
|
106
|
+
|
107
|
+
it "initializes root wrappers once" do
|
108
|
+
query_str = " { oid1: objectId oid2: objectId }"
|
109
|
+
res = Jazz::Schema.execute(query_str)
|
110
|
+
assert_equal res["data"]["oid1"], res["data"]["oid2"]
|
111
|
+
end
|
112
|
+
|
113
|
+
it "skips fields properly" do
|
114
|
+
query_str = "{ find(id: \"MagicalSkipId\") { __typename } }"
|
115
|
+
res = Jazz::Schema.execute(query_str)
|
116
|
+
assert_equal({"data" => nil }, res.to_h)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -14,11 +14,7 @@ describe GraphQL::Schema::Printer do
|
|
14
14
|
|
15
15
|
value "FOO", value: :foo
|
16
16
|
value "BAR", value: :bar
|
17
|
-
value "BAZ", deprecation_reason:
|
18
|
-
Use "BAR" instead.
|
19
|
-
|
20
|
-
It's the replacement for this value.
|
21
|
-
REASON
|
17
|
+
value "BAZ", deprecation_reason: 'Use "BAR".'
|
22
18
|
value "WOZ", deprecation_reason: GraphQL::Directive::DEFAULT_DEPRECATION_REASON
|
23
19
|
end
|
24
20
|
|
@@ -140,14 +136,6 @@ schema {
|
|
140
136
|
query: Root
|
141
137
|
}
|
142
138
|
|
143
|
-
# Marks an element of a GraphQL schema as no longer supported.
|
144
|
-
directive @deprecated(
|
145
|
-
# Explains why this element was deprecated, usually also including a suggestion
|
146
|
-
# for how to access supported similar data. Formatted in
|
147
|
-
# [Markdown](https://daringfireball.net/projects/markdown/).
|
148
|
-
reason: String = "No longer supported"
|
149
|
-
) on FIELD_DEFINITION | ENUM_VALUE
|
150
|
-
|
151
139
|
# Directs the executor to include this field or fragment only when the `if` argument is true.
|
152
140
|
directive @include(
|
153
141
|
# Included when true.
|
@@ -160,6 +148,14 @@ directive @skip(
|
|
160
148
|
if: Boolean!
|
161
149
|
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
|
162
150
|
|
151
|
+
# Marks an element of a GraphQL schema as no longer supported.
|
152
|
+
directive @deprecated(
|
153
|
+
# Explains why this element was deprecated, usually also including a suggestion
|
154
|
+
# for how to access supported similar data. Formatted in
|
155
|
+
# [Markdown](https://daringfireball.net/projects/markdown/).
|
156
|
+
reason: String = "No longer supported"
|
157
|
+
) on FIELD_DEFINITION | ENUM_VALUE
|
158
|
+
|
163
159
|
# A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
|
164
160
|
#
|
165
161
|
# In some cases, you need to provide options to alter GraphQL's execution behavior
|
@@ -349,6 +345,7 @@ schema {
|
|
349
345
|
subscription: Subscription
|
350
346
|
}
|
351
347
|
SCHEMA
|
348
|
+
|
352
349
|
assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
|
353
350
|
end
|
354
351
|
|
@@ -356,6 +353,7 @@ SCHEMA
|
|
356
353
|
custom_mutation = schema.mutation.redefine(name: "MyMutationRoot")
|
357
354
|
custom_schema = schema.redefine(mutation: custom_mutation)
|
358
355
|
|
356
|
+
|
359
357
|
expected = <<SCHEMA
|
360
358
|
schema {
|
361
359
|
query: Query
|
@@ -392,7 +390,7 @@ type Audio {
|
|
392
390
|
|
393
391
|
enum Choice {
|
394
392
|
BAR
|
395
|
-
BAZ @deprecated(reason: "Use \\\"BAR\\\"
|
393
|
+
BAZ @deprecated(reason: "Use \\\"BAR\\\".")
|
396
394
|
FOO
|
397
395
|
WOZ @deprecated
|
398
396
|
}
|
@@ -491,6 +489,7 @@ enum Choice {
|
|
491
489
|
}
|
492
490
|
|
493
491
|
type Subscription {
|
492
|
+
|
494
493
|
}
|
495
494
|
|
496
495
|
input Varied {
|
@@ -510,9 +509,7 @@ SCHEMA
|
|
510
509
|
when GraphQL::Argument
|
511
510
|
member.name != "id"
|
512
511
|
else
|
513
|
-
|
514
|
-
member.deprecation_reason.nil?
|
515
|
-
end
|
512
|
+
member.deprecation_reason.nil?
|
516
513
|
end
|
517
514
|
}
|
518
515
|
|
@@ -603,86 +600,12 @@ SCHEMA
|
|
603
600
|
type Post {
|
604
601
|
body: String!
|
605
602
|
comments: [Comment!]
|
606
|
-
comments_count: Int! @deprecated(reason: "Use \\\"comments\\\"
|
603
|
+
comments_count: Int! @deprecated(reason: \"Use \\\"comments\\\".\")
|
607
604
|
id: ID!
|
608
605
|
title: String!
|
609
606
|
}
|
610
607
|
SCHEMA
|
611
608
|
assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Post'])
|
612
609
|
end
|
613
|
-
|
614
|
-
it "can print arguments that use non-standard Ruby objects as default values" do
|
615
|
-
backing_object = Struct.new(:value)
|
616
|
-
|
617
|
-
scalar_type = GraphQL::ScalarType.define do
|
618
|
-
name "SomeType"
|
619
|
-
coerce_input ->(value, ctx) { backing_object.new(value) }
|
620
|
-
coerce_result ->(obj, ctx) { obj.value }
|
621
|
-
end
|
622
|
-
|
623
|
-
query_root = GraphQL::ObjectType.define do
|
624
|
-
name "Query"
|
625
|
-
description "The query root of this schema"
|
626
|
-
|
627
|
-
field :example do
|
628
|
-
type scalar_type
|
629
|
-
argument :input, scalar_type, default_value: backing_object.new("Howdy")
|
630
|
-
resolve ->(obj, args, ctx) { args[:input] }
|
631
|
-
end
|
632
|
-
end
|
633
|
-
|
634
|
-
schema = GraphQL::Schema.define do
|
635
|
-
query query_root
|
636
|
-
end
|
637
|
-
|
638
|
-
expected = <<SCHEMA
|
639
|
-
# The query root of this schema
|
640
|
-
type Query {
|
641
|
-
example(input: SomeType = "Howdy"): SomeType
|
642
|
-
}
|
643
|
-
SCHEMA
|
644
|
-
|
645
|
-
assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(query_root)
|
646
|
-
end
|
647
|
-
end
|
648
|
-
|
649
|
-
describe "#print_directive" do
|
650
|
-
it "prints the deprecation reason in a single line escaped string including line breaks" do
|
651
|
-
expected = <<SCHEMA
|
652
|
-
enum Choice {
|
653
|
-
BAR
|
654
|
-
BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
|
655
|
-
FOO
|
656
|
-
WOZ @deprecated
|
657
|
-
}
|
658
|
-
|
659
|
-
type Subscription {
|
660
|
-
}
|
661
|
-
|
662
|
-
input Varied {
|
663
|
-
bool: Boolean
|
664
|
-
enum: Choice = FOO
|
665
|
-
float: Float
|
666
|
-
int: Int
|
667
|
-
}
|
668
|
-
SCHEMA
|
669
|
-
|
670
|
-
only_filter = ->(member, ctx) {
|
671
|
-
case member
|
672
|
-
when GraphQL::ScalarType
|
673
|
-
true
|
674
|
-
when GraphQL::BaseType
|
675
|
-
ctx[:names].include?(member.name)
|
676
|
-
when GraphQL::Argument
|
677
|
-
member.name != "id"
|
678
|
-
else
|
679
|
-
true
|
680
|
-
end
|
681
|
-
}
|
682
|
-
|
683
|
-
context = { names: ["Varied", "Choice", "Subscription"] }
|
684
|
-
|
685
|
-
assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema, context: context, only: only_filter).print_schema
|
686
|
-
end
|
687
610
|
end
|
688
611
|
end
|