graphql 0.11.1 → 0.12.0

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql.rb +5 -2
  3. data/lib/graphql/argument.rb +8 -3
  4. data/lib/graphql/base_type.rb +5 -3
  5. data/lib/graphql/boolean_type.rb +6 -1
  6. data/lib/graphql/define.rb +8 -0
  7. data/lib/graphql/define/assign_argument.rb +19 -0
  8. data/lib/graphql/define/assign_enum_value.rb +16 -0
  9. data/lib/graphql/define/assign_object_field.rb +19 -0
  10. data/lib/graphql/define/assignment_dictionary.rb +26 -0
  11. data/lib/graphql/define/defined_object_proxy.rb +32 -0
  12. data/lib/graphql/define/instance_definable.rb +79 -0
  13. data/lib/graphql/{definition_helpers → define}/non_null_with_bang.rb +1 -1
  14. data/lib/graphql/{definition_helpers → define}/type_definer.rb +1 -1
  15. data/lib/graphql/directive.rb +7 -2
  16. data/lib/graphql/enum_type.rb +12 -6
  17. data/lib/graphql/execution_error.rb +1 -1
  18. data/lib/graphql/field.rb +26 -23
  19. data/lib/graphql/float_type.rb +2 -3
  20. data/lib/graphql/id_type.rb +9 -1
  21. data/lib/graphql/input_object_type.rb +11 -8
  22. data/lib/graphql/int_type.rb +2 -1
  23. data/lib/graphql/interface_type.rb +7 -2
  24. data/lib/graphql/introspection/input_value_type.rb +10 -1
  25. data/lib/graphql/invalid_null_error.rb +1 -1
  26. data/lib/graphql/object_type.rb +27 -25
  27. data/lib/graphql/query.rb +5 -8
  28. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -10
  29. data/lib/graphql/scalar_type.rb +4 -3
  30. data/lib/graphql/schema.rb +1 -1
  31. data/lib/graphql/static_validation/rules/document_does_not_exceed_max_depth.rb +1 -1
  32. data/lib/graphql/static_validation/validation_context.rb +5 -4
  33. data/lib/graphql/static_validation/validator.rb +3 -3
  34. data/lib/graphql/string_type.rb +2 -1
  35. data/lib/graphql/union_type.rb +1 -1
  36. data/lib/graphql/version.rb +1 -1
  37. data/readme.md +4 -10
  38. data/spec/graphql/boolean_type_spec.rb +20 -0
  39. data/spec/graphql/define/instance_definable_spec.rb +55 -0
  40. data/spec/graphql/field_spec.rb +14 -2
  41. data/spec/graphql/float_type_spec.rb +15 -0
  42. data/spec/graphql/id_type_spec.rb +9 -0
  43. data/spec/graphql/int_type_spec.rb +15 -0
  44. data/spec/graphql/introspection/input_value_type_spec.rb +36 -0
  45. data/spec/graphql/introspection/type_type_spec.rb +0 -23
  46. data/spec/graphql/query_spec.rb +16 -0
  47. data/spec/graphql/static_validation/complexity_validator_spec.rb +1 -1
  48. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +4 -3
  49. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +4 -3
  50. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +4 -3
  51. data/spec/graphql/static_validation/rules/document_does_not_exceed_max_depth_spec.rb +9 -1
  52. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +3 -2
  53. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +4 -3
  54. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +4 -3
  55. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +4 -3
  56. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +4 -3
  57. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +4 -3
  58. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +4 -3
  59. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +4 -3
  60. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +4 -3
  61. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +5 -4
  62. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +4 -3
  63. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +4 -3
  64. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +4 -3
  65. data/spec/graphql/static_validation/type_stack_spec.rb +3 -2
  66. data/spec/graphql/static_validation/validator_spec.rb +3 -25
  67. data/spec/graphql/string_type_spec.rb +15 -0
  68. data/spec/support/dairy_app.rb +2 -0
  69. metadata +25 -9
  70. data/lib/graphql/definition_helpers.rb +0 -4
  71. data/lib/graphql/definition_helpers/defined_by_config.rb +0 -123
  72. data/lib/graphql/definition_helpers/string_named_hash.rb +0 -22
@@ -21,6 +21,7 @@ describe GraphQL::Field do
21
21
  describe '.property ' do
22
22
  let(:field) do
23
23
  GraphQL::Field.define do
24
+ name 'field_name'
24
25
  # satisfies 'can define by config' below
25
26
  property :internal_prop
26
27
  end
@@ -37,7 +38,7 @@ describe GraphQL::Field do
37
38
 
38
39
  describe 'default resolver' do
39
40
  def acts_like_default_resolver(field, old_prop, new_prop)
40
- object = OpenStruct.new(old_prop => 'old value', new_prop => 'new value')
41
+ object = OpenStruct.new(old_prop => 'old value', new_prop => 'new value', field.name.to_sym => 'unset value')
41
42
 
42
43
  old_result = field.resolve(object, nil, nil)
43
44
  field.property = new_prop
@@ -47,7 +48,7 @@ describe GraphQL::Field do
47
48
 
48
49
  assert_equal(old_result, 'old value')
49
50
  assert_equal(new_result, 'new value')
50
- assert_equal(unset_result, GraphQL::Query::DEFAULT_RESOLVE)
51
+ assert_equal(unset_result, 'unset value')
51
52
  end
52
53
 
53
54
  it 'responds to changes in property' do
@@ -60,4 +61,15 @@ describe GraphQL::Field do
60
61
  end
61
62
  end
62
63
  end
64
+
65
+ describe "#name" do
66
+ it "can't be reassigned" do
67
+ field = GraphQL::Field.define do
68
+ name("something")
69
+ end
70
+ assert_equal "something", field.name
71
+ assert_raises { field.name = "somethingelse" }
72
+ assert_equal "something", field.name
73
+ end
74
+ end
63
75
  end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe GraphQL::FLOAT_TYPE do
4
+ describe "coerce_input" do
5
+ it "accepts ints and floats" do
6
+ assert_equal 1.0, GraphQL::FLOAT_TYPE.coerce_input(1)
7
+ assert_equal 6.1, GraphQL::FLOAT_TYPE.coerce_input(6.1)
8
+ end
9
+
10
+ it "rejects other types" do
11
+ assert_equal nil, GraphQL::FLOAT_TYPE.coerce_input("55")
12
+ assert_equal nil, GraphQL::FLOAT_TYPE.coerce_input(true)
13
+ end
14
+ end
15
+ end
@@ -20,4 +20,13 @@ describe GraphQL::ID_TYPE do
20
20
  assert_equal(expected, result)
21
21
  end
22
22
  end
23
+
24
+ describe 'coercion for other types' do
25
+ let(:query_string) { %|query getMilk { cow: milk(id: 1.0) { id } }| }
26
+
27
+ it "doesn't allow other types" do
28
+ assert_equal nil, result["data"]
29
+ assert_equal 1, result["errors"].length
30
+ end
31
+ end
23
32
  end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe GraphQL::INT_TYPE do
4
+ describe "coerce_input" do
5
+ it "accepts ints and floats" do
6
+ assert_equal 1, GraphQL::INT_TYPE.coerce_input(1)
7
+ assert_equal 6, GraphQL::INT_TYPE.coerce_input(6.1)
8
+ end
9
+
10
+ it "rejects other types" do
11
+ assert_equal nil, GraphQL::INT_TYPE.coerce_input("55")
12
+ assert_equal nil, GraphQL::INT_TYPE.coerce_input(true)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+
3
+
4
+ describe GraphQL::Introspection::InputValueType do
5
+ let(:query_string) {%|
6
+ {
7
+ __type(name: "DairyProductInput") {
8
+ name,
9
+ description,
10
+ kind,
11
+ inputFields {
12
+ name,
13
+ type { name },
14
+ defaultValue
15
+ }
16
+ }
17
+ }
18
+ |}
19
+ let(:result) { DummySchema.execute(query_string)}
20
+
21
+ it 'exposes metadata about input objects, giving extra quotes for strings' do
22
+ expected = { "data" => {
23
+ "__type" => {
24
+ "name"=>"DairyProductInput",
25
+ "description"=>"Properties for finding a dairy product",
26
+ "kind"=>"INPUT_OBJECT",
27
+ "inputFields"=>[
28
+ {"name"=>"source", "type"=>{ "name" => "Non-Null"}, "defaultValue"=>nil},
29
+ {"name"=>"originDairy", "type"=>{ "name" => "String"}, "defaultValue"=>"\"Sugar Hollow Dairy\""},
30
+ {"name"=>"fatContent", "type"=>{ "name" => "Float"}, "defaultValue"=>nil}
31
+ ]
32
+ }
33
+ }}
34
+ assert_equal(expected, result)
35
+ end
36
+ end
@@ -90,28 +90,5 @@ describe GraphQL::Introspection::TypeType do
90
90
  }}
91
91
  assert_equal(expected, result)
92
92
  end
93
-
94
- describe 'input objects' do
95
- let(:query_string) {%|
96
- query introspectionQuery {
97
- __type(name: "DairyProductInput") { name, description, kind, inputFields { name, type { name }, defaultValue } }
98
- }
99
- |}
100
-
101
- it 'exposes metadata about input objects' do
102
- expected = { "data" => {
103
- "__type" => {
104
- "name"=>"DairyProductInput",
105
- "description"=>"Properties for finding a dairy product",
106
- "kind"=>"INPUT_OBJECT",
107
- "inputFields"=>[
108
- {"name"=>"source", "type"=>{ "name" => "Non-Null"}, "defaultValue"=>nil},
109
- {"name"=>"fatContent", "type"=>{ "name" => "Float"}, "defaultValue"=>nil}
110
- ]
111
- }
112
- }}
113
- assert_equal(expected, result)
114
- end
115
- end
116
93
  end
117
94
  end
@@ -30,6 +30,7 @@ describe GraphQL::Query do
30
30
  |}
31
31
  let(:debug) { false }
32
32
  let(:operation_name) { nil }
33
+ let(:max_depth) { nil }
33
34
  let(:query_variables) { {"cheeseId" => 2} }
34
35
  let(:schema) { DummySchema }
35
36
  let(:query) { GraphQL::Query.new(
@@ -38,6 +39,7 @@ describe GraphQL::Query do
38
39
  variables: query_variables,
39
40
  debug: debug,
40
41
  operation_name: operation_name,
42
+ max_depth: max_depth,
41
43
  )}
42
44
  let(:result) { query.result }
43
45
  describe '#result' do
@@ -317,4 +319,18 @@ describe GraphQL::Query do
317
319
  end
318
320
  end
319
321
  end
322
+
323
+ describe "#max_depth" do
324
+ it "defaults to the schema's max_depth" do
325
+ assert_equal 5, query.max_depth
326
+ end
327
+
328
+ describe "overriding max_depth" do
329
+ let(:max_depth) { 12 }
330
+
331
+ it "overrides the schema's max_depth" do
332
+ assert_equal 12, query.max_depth
333
+ end
334
+ end
335
+ end
320
336
  end
@@ -1,7 +1,7 @@
1
1
  # require "spec_helper"
2
2
  #
3
3
  # describe GraphQL::StaticValidation::ComplexityValidator do
4
- # let(:document) { GraphQL.parse(query_string)}
4
+ # let(:query_string) {query_string)}
5
5
  # let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [complexity_validator]) }
6
6
  # let(:errors) { validator.validate(document) }
7
7
  # let(:complexity_validator) { GraphQL::StaticValidation::ComplexityValidator.new(max_fields: 6, list_multiplier: 2) }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::ArgumentLiteralsAreCompatible do
4
- let(:document) { GraphQL.parse(%|
4
+ let(:query_string) {%|
5
5
  query getCheese {
6
6
  cheese(id: "aasdlkfj") { source }
7
7
  cheese(id: 1) { source @skip(if: {id: 1})}
@@ -15,10 +15,11 @@ describe GraphQL::StaticValidation::ArgumentLiteralsAreCompatible do
15
15
  fragment cheeseFields on Cheese {
16
16
  similarCheese(source: 4.5)
17
17
  }
18
- |)}
18
+ |}
19
19
 
20
20
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::ArgumentLiteralsAreCompatible]) }
21
- let(:errors) { validator.validate(document) }
21
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
22
+ let(:errors) { validator.validate(query) }
22
23
 
23
24
  it 'finds undefined or missing-required arguments to fields and directives' do
24
25
  assert_equal(6, errors.length)
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::ArgumentsAreDefined do
4
- let(:document) { GraphQL.parse("
4
+ let(:query_string) {"
5
5
  query getCheese {
6
6
  cheese(id: 1) { source }
7
7
  cheese(silly: false) { source }
@@ -12,10 +12,11 @@ describe GraphQL::StaticValidation::ArgumentsAreDefined do
12
12
  similarCheese(source: SHEEP, nonsense: 1)
13
13
  id @skip(something: 3.4)
14
14
  }
15
- ")}
15
+ "}
16
16
 
17
17
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::ArgumentsAreDefined]) }
18
- let(:errors) { validator.validate(document) }
18
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
19
+ let(:errors) { validator.validate(query) }
19
20
 
20
21
  it 'finds undefined arguments to fields and directives' do
21
22
  assert_equal(4, errors.length)
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::DirectivesAreDefined do
4
- let(:document) { GraphQL.parse("
4
+ let(:query_string) {"
5
5
  query getCheese {
6
6
  okCheese: cheese(id: 1) {
7
7
  id @skip(if: true),
@@ -11,10 +11,11 @@ describe GraphQL::StaticValidation::DirectivesAreDefined do
11
11
  }
12
12
  }
13
13
  }
14
- ")}
14
+ "}
15
15
 
16
16
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::DirectivesAreDefined]) }
17
- let(:errors) { validator.validate(document) }
17
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
18
+ let(:errors) { validator.validate(query) }
18
19
 
19
20
  describe 'non-existent directives' do
20
21
  it 'makes errors for them' do
@@ -3,7 +3,8 @@ require "spec_helper"
3
3
  describe GraphQL::StaticValidation::DocumentDoesNotExceedMaxDepth do
4
4
  let(:rule) { GraphQL::StaticValidation::DocumentDoesNotExceedMaxDepth }
5
5
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [rule]) }
6
- let(:errors) { validator.validate(GraphQL.parse(query_string)) }
6
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
7
+ let(:errors) { validator.validate(query) }
7
8
 
8
9
  let(:query_string) { "
9
10
  {
@@ -29,6 +30,13 @@ describe GraphQL::StaticValidation::DocumentDoesNotExceedMaxDepth do
29
30
  end
30
31
  end
31
32
 
33
+ describe "when the query specifies a different max_depth" do
34
+ let(:query) { GraphQL::Query.new(DummySchema, query_string, max_depth: 100) }
35
+ it "obeys that max_depth" do
36
+ assert_equal 0, errors.length
37
+ end
38
+ end
39
+
32
40
  describe "When the query is not deeper than max_depth" do
33
41
  before do
34
42
  @prev_max_depth = DummySchema.max_depth
@@ -12,8 +12,9 @@ describe GraphQL::StaticValidation::FieldsAreDefinedOnType do
12
12
  "}
13
13
 
14
14
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FieldsAreDefinedOnType]) }
15
- let(:errors) { validator.validate(GraphQL.parse(query_string)) }
16
- let(:error_messages) { errors.map { |e| e["message" ] }}
15
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
16
+ let(:errors) { validator.validate(query) }
17
+ let(:error_messages) { errors.map { |e| e["message"] } }
17
18
 
18
19
  it "finds fields that are requested on types that don't have that field" do
19
20
  expected_errors = [
@@ -1,16 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FieldsHaveAppropriateSelections do
4
- let(:document) { GraphQL.parse("
4
+ let(:query_string) {"
5
5
  query getCheese {
6
6
  okCheese: cheese(id: 1) { fatContent, similarCheese(source: YAK) { source } }
7
7
  missingFieldsCheese: cheese(id: 1)
8
8
  illegalSelectionCheese: cheese(id: 1) { id { something, ... someFields } }
9
9
  }
10
- ")}
10
+ "}
11
11
 
12
12
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FieldsHaveAppropriateSelections]) }
13
- let(:errors) { validator.validate(document) }
13
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
14
+ let(:errors) { validator.validate(query) }
14
15
 
15
16
  it 'adds errors for selections on scalars' do
16
17
  assert_equal(2, errors.length)
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FieldsWillMerge do
4
- let(:document) { GraphQL.parse("
4
+ let(:query_string) {"
5
5
  query getCheese($sourceVar: DairyAnimal!) {
6
6
  cheese(id: 1) {
7
7
  id,
@@ -27,10 +27,11 @@ describe GraphQL::StaticValidation::FieldsWillMerge do
27
27
  similarCow: similarCheese(source: COW) { similarCowSource: id, id }
28
28
  id @someFlag
29
29
  }
30
- ")}
30
+ "}
31
31
 
32
32
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FieldsWillMerge]) }
33
- let(:errors) { validator.validate(document) }
33
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
34
+ let(:errors) { validator.validate(query) }
34
35
  let(:error_messages) { errors.map { |e| e["message" ] }}
35
36
 
36
37
  it 'finds field naming conflicts' do
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FragmentSpreadsArePossible do
4
- let(:document) { GraphQL.parse(%|
4
+ let(:query_string) {%|
5
5
  query getCheese {
6
6
  cheese(id: 1) {
7
7
  ... milkFields
@@ -20,10 +20,11 @@ describe GraphQL::StaticValidation::FragmentSpreadsArePossible do
20
20
  fatContent
21
21
  ... milkFields
22
22
  }
23
- |)}
23
+ |}
24
24
 
25
25
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FragmentSpreadsArePossible]) }
26
- let(:errors) { validator.validate(document) }
26
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
27
+ let(:errors) { validator.validate(query) }
27
28
 
28
29
  it "doesnt allow spreads where they'll never apply" do
29
30
  # TODO: more negative, abstract examples here, add stuff to the schema
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FragmentTypesExist do
4
- let(:document) { GraphQL.parse("
4
+ let(:query_string) {"
5
5
  query getCheese {
6
6
  cheeese(id: 1) {
7
7
  ... on Cheese { source }
@@ -17,10 +17,11 @@ describe GraphQL::StaticValidation::FragmentTypesExist do
17
17
  fragment cheeseFields on Cheese {
18
18
  fatContent
19
19
  }
20
- ")}
20
+ "}
21
21
 
22
22
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FragmentTypesExist]) }
23
- let(:errors) { validator.validate(document) }
23
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
24
+ let(:errors) { validator.validate(query) }
24
25
 
25
26
  it 'finds non-existent types on fragments' do
26
27
  assert_equal(2, errors.length)
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FragmentsAreFinite do
4
- let(:document) { GraphQL.parse(%|
4
+ let(:query_string) {%|
5
5
  query getCheese {
6
6
  cheese(id: 1) {
7
7
  ... idField
@@ -22,10 +22,11 @@ describe GraphQL::StaticValidation::FragmentsAreFinite do
22
22
  fragment idField on Cheese {
23
23
  id
24
24
  }
25
- |)}
25
+ |}
26
26
 
27
27
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FragmentsAreFinite]) }
28
- let(:errors) { validator.validate(document) }
28
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
29
+ let(:errors) { validator.validate(query) }
29
30
 
30
31
  it 'doesnt allow infinite loops' do
31
32
  expected = [
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FragmentsAreOnCompositeTypes do
4
- let(:document) { GraphQL.parse(%|
4
+ let(:query_string) {%|
5
5
  query getCheese {
6
6
  cheese(id: 1) {
7
7
  ... on Cheese {
@@ -23,10 +23,11 @@ describe GraphQL::StaticValidation::FragmentsAreOnCompositeTypes do
23
23
  fragment intFields on Int {
24
24
  something
25
25
  }
26
- |)}
26
+ |}
27
27
 
28
28
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FragmentsAreOnCompositeTypes]) }
29
- let(:errors) { validator.validate(document) }
29
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
30
+ let(:errors) { validator.validate(query) }
30
31
 
31
32
  it 'requires Object/Union/Interface fragment types' do
32
33
  expected = [
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GraphQL::StaticValidation::FragmentsAreUsed do
4
- let(:document) { GraphQL.parse("
4
+ let(:query_string) {"
5
5
  query getCheese {
6
6
  name,
7
7
  ...cheeseFields
@@ -9,10 +9,11 @@ describe GraphQL::StaticValidation::FragmentsAreUsed do
9
9
  }
10
10
  fragment cheeseFields on Cheese { fatContent }
11
11
  fragment unusedFields on Cheese { is, not, used }
12
- ")}
12
+ "}
13
13
 
14
14
  let(:validator) { GraphQL::StaticValidation::Validator.new(schema: DummySchema, rules: [GraphQL::StaticValidation::FragmentsAreUsed]) }
15
- let(:errors) { validator.validate(document) }
15
+ let(:query) { GraphQL::Query.new(DummySchema, query_string) }
16
+ let(:errors) { validator.validate(query) }
16
17
 
17
18
  it 'adds errors for unused fragment definitions' do
18
19
  assert_includes(errors, {"message"=>"Fragment unusedFields was defined, but not used", "locations"=>[{"line"=>8, "column"=>5}]})