graphql 1.8.0.pre1 → 1.8.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- 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 +6 -1
- data/lib/generators/graphql/templates/function.erb +2 -2
- data/lib/generators/graphql/templates/loader.erb +2 -2
- data/lib/graphql.rb +1 -0
- data/lib/graphql/execution.rb +1 -0
- data/lib/graphql/execution/instrumentation.rb +82 -0
- data/lib/graphql/execution/multiplex.rb +11 -28
- data/lib/graphql/field.rb +5 -0
- data/lib/graphql/internal_representation/node.rb +1 -1
- data/lib/graphql/language.rb +1 -0
- data/lib/graphql/language/document_from_schema_definition.rb +185 -0
- data/lib/graphql/language/lexer.rb +3 -3
- data/lib/graphql/language/lexer.rl +2 -2
- data/lib/graphql/language/token.rb +9 -2
- data/lib/graphql/query.rb +4 -0
- data/lib/graphql/railtie.rb +83 -0
- data/lib/graphql/relay/relation_connection.rb +13 -18
- data/lib/graphql/schema.rb +6 -0
- data/lib/graphql/schema/argument.rb +1 -1
- data/lib/graphql/schema/build_from_definition.rb +2 -0
- data/lib/graphql/schema/field.rb +5 -2
- data/lib/graphql/schema/input_object.rb +2 -2
- data/lib/graphql/schema/member.rb +10 -0
- data/lib/graphql/schema/member/build_type.rb +8 -0
- data/lib/graphql/schema/member/instrumentation.rb +3 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +6 -4
- data/lib/graphql/tracing.rb +1 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +45 -0
- data/lib/graphql/tracing/platform_tracing.rb +20 -7
- data/lib/graphql/upgrader/member.rb +111 -0
- data/lib/graphql/upgrader/schema.rb +37 -0
- data/lib/graphql/version.rb +1 -1
- data/readme.md +1 -1
- data/spec/dummy/app/channels/graphql_channel.rb +22 -1
- data/spec/dummy/log/development.log +239 -0
- data/spec/dummy/log/test.log +204 -0
- data/spec/dummy/test/system/action_cable_subscription_test.rb +4 -0
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
- data/spec/generators/graphql/function_generator_spec.rb +26 -0
- data/spec/generators/graphql/loader_generator_spec.rb +24 -0
- 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/base_type_spec.rb +12 -0
- data/spec/graphql/boolean_type_spec.rb +3 -3
- data/spec/graphql/execution/execute_spec.rb +1 -1
- data/spec/graphql/execution/instrumentation_spec.rb +165 -0
- data/spec/graphql/execution/multiplex_spec.rb +1 -1
- 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 -2
- 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 +1 -0
- data/spec/graphql/language/document_from_schema_definition_spec.rb +337 -0
- data/spec/graphql/language/lexer_spec.rb +12 -1
- data/spec/graphql/language/parser_spec.rb +1 -1
- data/spec/graphql/query/arguments_spec.rb +3 -3
- data/spec/graphql/query/variables_spec.rb +1 -1
- data/spec/graphql/query_spec.rb +4 -4
- data/spec/graphql/relay/base_connection_spec.rb +1 -1
- 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 +58 -0
- data/spec/graphql/schema/build_from_definition_spec.rb +14 -0
- data/spec/graphql/schema/field_spec.rb +5 -1
- data/spec/graphql/schema/instrumentation_spec.rb +39 -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 +8 -1
- 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 +59 -0
- data/spec/graphql/upgrader/member_spec.rb +222 -0
- data/spec/graphql/upgrader/schema_spec.rb +82 -0
- data/spec/support/dummy/schema.rb +19 -0
- data/spec/support/jazz.rb +14 -14
- data/spec/support/star_wars/data.rb +1 -2
- metadata +18 -2
@@ -115,8 +115,8 @@ describe GraphQL::Query::Arguments do
|
|
115
115
|
end
|
116
116
|
|
117
117
|
it "returns nil for missing keys" do
|
118
|
-
|
119
|
-
|
118
|
+
assert_nil arguments["z"]
|
119
|
+
assert_nil arguments[7]
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -303,7 +303,7 @@ describe GraphQL::Query::Arguments do
|
|
303
303
|
end
|
304
304
|
|
305
305
|
it "generates argument classes that responds to keys as functions" do
|
306
|
-
|
306
|
+
assert_nil input_object.arguments_class
|
307
307
|
|
308
308
|
GraphQL::Query::Arguments.construct_arguments_class(input_object)
|
309
309
|
args = input_object.arguments_class.new({foo: 3, bar: -90}, context: nil)
|
@@ -111,7 +111,7 @@ describe GraphQL::Query::Variables do
|
|
111
111
|
let(:provided_variables) { { "ids" => [nil] } }
|
112
112
|
it "returns an error" do
|
113
113
|
assert_equal 1, result["errors"].length
|
114
|
-
|
114
|
+
assert_nil result["data"]
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
data/spec/graphql/query_spec.rb
CHANGED
@@ -111,7 +111,7 @@ describe GraphQL::Query do
|
|
111
111
|
}
|
112
112
|
|
113
113
|
it "returns nil" do
|
114
|
-
|
114
|
+
assert_nil query.operation_name
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
@@ -148,7 +148,7 @@ describe GraphQL::Query do
|
|
148
148
|
}
|
149
149
|
|
150
150
|
it "returns the inferred operation name" do
|
151
|
-
|
151
|
+
assert_nil query.selected_operation_name
|
152
152
|
end
|
153
153
|
end
|
154
154
|
end
|
@@ -532,7 +532,7 @@ describe GraphQL::Query do
|
|
532
532
|
|
533
533
|
it "overrides the schema's max_depth" do
|
534
534
|
assert result["data"].key?("cheese")
|
535
|
-
|
535
|
+
assert_nil result["errors"]
|
536
536
|
end
|
537
537
|
end
|
538
538
|
end
|
@@ -699,7 +699,7 @@ describe GraphQL::Query do
|
|
699
699
|
|
700
700
|
it "returns nil when there is no selected operation" do
|
701
701
|
query = GraphQL::Query.new(schema, '# Only a comment')
|
702
|
-
|
702
|
+
assert_nil query.irep_selection
|
703
703
|
end
|
704
704
|
end
|
705
705
|
|
@@ -73,7 +73,7 @@ describe GraphQL::Relay::ConnectionType do
|
|
73
73
|
|
74
74
|
it "nullifies the parent and adds an error" do
|
75
75
|
result = star_wars_query(query_string)
|
76
|
-
|
76
|
+
assert_nil result["data"]["basesWithNullName"]["edges"][0]["node"]
|
77
77
|
assert_equal "Boom!", result["errors"][0]["message"]
|
78
78
|
end
|
79
79
|
end
|
@@ -193,17 +193,17 @@ describe GraphQL::Relay::Mutation do
|
|
193
193
|
end
|
194
194
|
|
195
195
|
it "doesn't get a mutation in the metadata" do
|
196
|
-
|
196
|
+
assert_nil custom_return_type.mutation
|
197
197
|
end
|
198
198
|
|
199
199
|
it "supports input fields with nil default value" do
|
200
200
|
assert input.arguments['nullDefault'].default_value?
|
201
|
-
|
201
|
+
assert_nil input.arguments['nullDefault'].default_value
|
202
202
|
end
|
203
203
|
|
204
204
|
it "supports input fields with no default value" do
|
205
205
|
assert !input.arguments['noDefault'].default_value?
|
206
|
-
|
206
|
+
assert_nil input.arguments['noDefault'].default_value
|
207
207
|
end
|
208
208
|
|
209
209
|
it "supports input fields with non-nil default value" do
|
@@ -74,6 +74,35 @@ describe GraphQL::Relay::RelationConnection do
|
|
74
74
|
)
|
75
75
|
end
|
76
76
|
|
77
|
+
it "makes one sql query for items and another for count" do
|
78
|
+
query_str = <<-GRAPHQL
|
79
|
+
{
|
80
|
+
empire {
|
81
|
+
bases(first: 2) {
|
82
|
+
totalCount
|
83
|
+
edges {
|
84
|
+
cursor
|
85
|
+
node {
|
86
|
+
name
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
GRAPHQL
|
93
|
+
io = StringIO.new
|
94
|
+
begin
|
95
|
+
prev_logger = ActiveRecord::Base.logger
|
96
|
+
ActiveRecord::Base.logger = Logger.new(io)
|
97
|
+
result = star_wars_query(query_str, "first" => 2)
|
98
|
+
ensure
|
99
|
+
ActiveRecord::Base.logger = prev_logger
|
100
|
+
end
|
101
|
+
assert_equal 2, io.string.scan("\n").count, "Two log entries"
|
102
|
+
assert_equal 3, result["data"]["empire"]["bases"]["totalCount"]
|
103
|
+
assert_equal 2, result["data"]["empire"]["bases"]["edges"].size
|
104
|
+
end
|
105
|
+
|
77
106
|
it "provides bidirectional_pagination" do
|
78
107
|
result = star_wars_query(query_string, "first" => 1)
|
79
108
|
last_cursor = get_last_cursor(result)
|
@@ -564,6 +593,35 @@ describe GraphQL::Relay::RelationConnection do
|
|
564
593
|
result = star_wars_query(query_string, "last" => 1, "nameIncludes" => "ea", "before" => before)
|
565
594
|
assert_equal(["Death Star"], get_names(result))
|
566
595
|
end
|
596
|
+
|
597
|
+
it "makes one sql query for items and another for count" do
|
598
|
+
query_str = <<-GRAPHQL
|
599
|
+
{
|
600
|
+
empire {
|
601
|
+
basesAsSequelDataset(first: 2) {
|
602
|
+
totalCount
|
603
|
+
edges {
|
604
|
+
cursor
|
605
|
+
node {
|
606
|
+
name
|
607
|
+
}
|
608
|
+
}
|
609
|
+
}
|
610
|
+
}
|
611
|
+
}
|
612
|
+
GRAPHQL
|
613
|
+
result = nil
|
614
|
+
io = StringIO.new
|
615
|
+
begin
|
616
|
+
StarWars::DB.loggers << Logger.new(io)
|
617
|
+
result = star_wars_query(query_str, "first" => 2)
|
618
|
+
ensure
|
619
|
+
StarWars::DB.loggers.pop
|
620
|
+
end
|
621
|
+
assert_equal 2, io.string.scan("SELECT").count
|
622
|
+
assert_equal 3, result["data"]["empire"]["basesAsSequelDataset"]["totalCount"]
|
623
|
+
assert_equal 2, result["data"]["empire"]["basesAsSequelDataset"]["edges"].size
|
624
|
+
end
|
567
625
|
end
|
568
626
|
end
|
569
627
|
|
@@ -30,6 +30,20 @@ type HelloScalars {
|
|
30
30
|
build_schema_and_compare_output(schema.chop)
|
31
31
|
end
|
32
32
|
|
33
|
+
it 'can build a schema with default input object values' do
|
34
|
+
schema = <<-SCHEMA
|
35
|
+
input InputObject {
|
36
|
+
a: Int
|
37
|
+
}
|
38
|
+
|
39
|
+
type Query {
|
40
|
+
a(input: InputObject = {a: 1}): String
|
41
|
+
}
|
42
|
+
SCHEMA
|
43
|
+
|
44
|
+
build_schema_and_compare_output(schema.chop)
|
45
|
+
end
|
46
|
+
|
33
47
|
it 'can build a schema with directives' do
|
34
48
|
schema = <<-SCHEMA
|
35
49
|
schema {
|
@@ -4,11 +4,15 @@ require "spec_helper"
|
|
4
4
|
describe GraphQL::Schema::Field do
|
5
5
|
describe "graphql definition" do
|
6
6
|
let(:object_class) { Jazz::Query }
|
7
|
-
let(:field) { object_class.fields.find { |f| f.name == "
|
7
|
+
let(:field) { object_class.fields.find { |f| f.name == "inspect_input" } }
|
8
8
|
|
9
9
|
it "uses the argument class" do
|
10
10
|
arg_defn = field.graphql_definition.arguments.values.first
|
11
11
|
assert_equal :ok, arg_defn.metadata[:custom]
|
12
12
|
end
|
13
|
+
|
14
|
+
it "camelizes the field name" do
|
15
|
+
assert_equal 'inspectInput', field.graphql_definition.name
|
16
|
+
end
|
13
17
|
end
|
14
18
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
module InstrumentationSpec
|
5
|
+
class SomeInterface < GraphQL::Schema::Interface
|
6
|
+
field :neverCalled, String, null: false
|
7
|
+
|
8
|
+
def never_called
|
9
|
+
"should never be called"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class SomeType < GraphQL::Schema::Object
|
14
|
+
implements SomeInterface
|
15
|
+
end
|
16
|
+
|
17
|
+
class Query < GraphQL::Schema::Object
|
18
|
+
field :someField, [SomeInterface], null: true
|
19
|
+
|
20
|
+
def some_field
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Schema < GraphQL::Schema
|
26
|
+
query Query
|
27
|
+
orphan_types [SomeType]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe GraphQL::Schema::Member::Instrumentation do
|
32
|
+
describe "resolving nullable interface lists to nil" do
|
33
|
+
let(:query) { "query { someField { neverCalled } }"}
|
34
|
+
it "returns nil instead of failing" do
|
35
|
+
result = InstrumentationSpec::Schema.execute(query)
|
36
|
+
assert_nil(result["someField"])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -333,7 +333,7 @@ describe GraphQL::Schema::Validation do
|
|
333
333
|
end
|
334
334
|
|
335
335
|
it "allows null default value for nullable argument" do
|
336
|
-
|
336
|
+
assert_nil GraphQL::Schema::Validation.validate(null_default_value)
|
337
337
|
end
|
338
338
|
end
|
339
339
|
|
@@ -242,8 +242,8 @@ describe GraphQL::Schema::Warden do
|
|
242
242
|
GRAPHQL
|
243
243
|
res = MaskHelpers.query_with_mask(query_string, mask)
|
244
244
|
assert_equal "Query", res["data"]["__schema"]["queryType"]["name"]
|
245
|
-
|
246
|
-
|
245
|
+
assert_nil res["data"]["__schema"]["mutationType"]
|
246
|
+
assert_nil res["data"]["__schema"]["subscriptionType"]
|
247
247
|
type_names = res["data"]["__schema"]["types"].map { |t| t["name"] }
|
248
248
|
refute type_names.include?("Mutation")
|
249
249
|
refute type_names.include?("Subscription")
|
@@ -344,7 +344,7 @@ describe GraphQL::Schema::Warden do
|
|
344
344
|
res = MaskHelpers.run_query(query_string, only: whitelist)
|
345
345
|
|
346
346
|
# It's not visible by name
|
347
|
-
|
347
|
+
assert_nil res["data"]["Phoneme"]
|
348
348
|
|
349
349
|
# It's not visible in `__schema`
|
350
350
|
all_type_names = type_names(res)
|
@@ -423,7 +423,7 @@ describe GraphQL::Schema::Warden do
|
|
423
423
|
|
424
424
|
res = MaskHelpers.query_with_mask(query_string, mask)
|
425
425
|
type = res["data"]["__type"]
|
426
|
-
|
426
|
+
assert_nil type
|
427
427
|
end
|
428
428
|
end
|
429
429
|
end
|
@@ -543,7 +543,7 @@ describe GraphQL::Schema::Warden do
|
|
543
543
|
|
544
544
|
res = MaskHelpers.query_with_mask(query_string, mask)
|
545
545
|
|
546
|
-
|
546
|
+
assert_nil res["data"]["WithinInput"], "The type isn't accessible by name"
|
547
547
|
|
548
548
|
languages_arg_names = res["data"]["Query"]["fields"].find { |f| f["name"] == "languages" }["args"].map { |a| a["name"] }
|
549
549
|
refute_includes languages_arg_names, "within", "Arguments that point to it are gone"
|
@@ -666,7 +666,7 @@ describe GraphQL::Schema::Warden do
|
|
666
666
|
it "is additive with query filters" do
|
667
667
|
query_except = ->(member, ctx) { member.metadata[:hidden_input_object_type] }
|
668
668
|
res = schema.execute(query_str, except: query_except)
|
669
|
-
|
669
|
+
assert_nil res["data"]["input"]
|
670
670
|
enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
|
671
671
|
refute_includes enum_values, "TRILL"
|
672
672
|
end
|
@@ -695,13 +695,13 @@ describe GraphQL::Schema::Warden do
|
|
695
695
|
only: [visible_enum_value, visible_abstract_type],
|
696
696
|
except: [hidden_input_object, hidden_type],
|
697
697
|
)
|
698
|
-
|
698
|
+
assert_nil res["data"]["input"]
|
699
699
|
enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
|
700
700
|
assert_equal 5, enum_values.length
|
701
701
|
refute_includes enum_values, "TRILL"
|
702
702
|
# These are also filtered out:
|
703
703
|
assert_equal 0, res["data"]["abstractType"]["interfaces"].length
|
704
|
-
|
704
|
+
assert_nil res["data"]["type"]
|
705
705
|
end
|
706
706
|
end
|
707
707
|
|
@@ -712,7 +712,7 @@ describe GraphQL::Schema::Warden do
|
|
712
712
|
except: hidden_input_object,
|
713
713
|
}
|
714
714
|
res = MaskHelpers.run_query(query_str, context: { filters: filters })
|
715
|
-
|
715
|
+
assert_nil res["data"]["input"]
|
716
716
|
enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
|
717
717
|
assert_equal 5, enum_values.length
|
718
718
|
refute_includes enum_values, "TRILL"
|
@@ -727,13 +727,13 @@ describe GraphQL::Schema::Warden do
|
|
727
727
|
except: [hidden_input_object, hidden_type],
|
728
728
|
}
|
729
729
|
res = MaskHelpers.run_query(query_str, context: { filters: filters })
|
730
|
-
|
730
|
+
assert_nil res["data"]["input"]
|
731
731
|
enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
|
732
732
|
assert_equal 5, enum_values.length
|
733
733
|
refute_includes enum_values, "TRILL"
|
734
734
|
# These are also filtered out:
|
735
735
|
assert_equal 0, res["data"]["abstractType"]["interfaces"].length
|
736
|
-
|
736
|
+
assert_nil res["data"]["type"]
|
737
737
|
end
|
738
738
|
end
|
739
739
|
end
|
data/spec/graphql/schema_spec.rb
CHANGED
@@ -23,6 +23,13 @@ describe GraphQL::Schema do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe "#to_document" do
|
27
|
+
it "returns the AST for the schema IDL" do
|
28
|
+
expected = GraphQL::Language::DocumentFromSchemaDefinition.new(schema).document
|
29
|
+
assert expected.eql?(schema.to_document)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
26
33
|
describe "#root_types" do
|
27
34
|
it "returns a list of the schema's root types" do
|
28
35
|
assert_equal(
|
@@ -372,7 +379,7 @@ type Query {
|
|
372
379
|
assert_equal true, schema.lazy?(LazyObj.new)
|
373
380
|
assert_equal :dup, schema.lazy_method_name(LazyObjChild.new)
|
374
381
|
assert_equal true, schema.lazy?(LazyObjChild.new)
|
375
|
-
|
382
|
+
assert_nil schema.lazy_method_name({})
|
376
383
|
assert_equal false, schema.lazy?({})
|
377
384
|
end
|
378
385
|
end
|
@@ -72,9 +72,9 @@ describe GraphQL::STRING_TYPE do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "doesn't accept other types" do
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
assert_nil string_type.coerce_isolated_input(100)
|
76
|
+
assert_nil string_type.coerce_isolated_input(true)
|
77
|
+
assert_nil string_type.coerce_isolated_input(0.999)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
@@ -242,7 +242,7 @@ describe GraphQL::Subscriptions do
|
|
242
242
|
schema.execute(query_str, context: { socket: "1" }, variables: { "id" => "8" }, root_value: root_object)
|
243
243
|
schema.subscriptions.trigger("payload", { "id" => "8"}, OpenStruct.new(str: nil, int: nil))
|
244
244
|
delivery = deliveries["1"].first
|
245
|
-
|
245
|
+
assert_nil delivery.fetch("data")
|
246
246
|
assert_equal 1, delivery["errors"].length
|
247
247
|
end
|
248
248
|
|
@@ -53,4 +53,63 @@ describe GraphQL::Tracing::PlatformTracing do
|
|
53
53
|
assert_equal expected_trace, CustomPlatformTracer::TRACE
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
describe "by default, scalar fields are not traced" do
|
58
|
+
let(:schema) {
|
59
|
+
Dummy::Schema.redefine {
|
60
|
+
use(CustomPlatformTracer)
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
before do
|
65
|
+
CustomPlatformTracer::TRACE.clear
|
66
|
+
end
|
67
|
+
|
68
|
+
it "only traces traceTrue, not traceFalse or traceNil" do
|
69
|
+
schema.execute(" { tracingScalar { traceNil traceFalse traceTrue } }")
|
70
|
+
expected_trace = [
|
71
|
+
"em",
|
72
|
+
"am",
|
73
|
+
"l",
|
74
|
+
"p",
|
75
|
+
"v",
|
76
|
+
"aq",
|
77
|
+
"eq",
|
78
|
+
"Q.t",
|
79
|
+
"T.t",
|
80
|
+
"eql",
|
81
|
+
]
|
82
|
+
assert_equal expected_trace, CustomPlatformTracer::TRACE
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "when scalar fields are traced by default, they are unless specified" do
|
87
|
+
let(:schema) {
|
88
|
+
Dummy::Schema.redefine {
|
89
|
+
use(CustomPlatformTracer, trace_scalars: true)
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
before do
|
94
|
+
CustomPlatformTracer::TRACE.clear
|
95
|
+
end
|
96
|
+
|
97
|
+
it "traces traceTrue and traceNil but not traceFalse" do
|
98
|
+
schema.execute(" { tracingScalar { traceNil traceFalse traceTrue } }")
|
99
|
+
expected_trace = [
|
100
|
+
"em",
|
101
|
+
"am",
|
102
|
+
"l",
|
103
|
+
"p",
|
104
|
+
"v",
|
105
|
+
"aq",
|
106
|
+
"eq",
|
107
|
+
"Q.t",
|
108
|
+
"T.t",
|
109
|
+
"T.t",
|
110
|
+
"eql",
|
111
|
+
]
|
112
|
+
assert_equal expected_trace, CustomPlatformTracer::TRACE
|
113
|
+
end
|
114
|
+
end
|
56
115
|
end
|