rspec-graphql_matchers 1.3.1 → 2.0.0.pre.rc.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cfc59ebc6b348aeab1defdb0057751774ea69653260195b26e9a95363f86430a
4
- data.tar.gz: a23a3d725d3e0f2fa8136f7ab9b74efeb411a6e3d0e36e683ae5e99268bb08c6
3
+ metadata.gz: 984e7d05766f0502ee910f99f522cd81a873b87a9c64ba13b7b1441602c65e51
4
+ data.tar.gz: d21699dc04dde4843a7d9a109674f8b9d208b35adb39ccfa5a7c2560b209ce4e
5
5
  SHA512:
6
- metadata.gz: dcd1bd614c785d6f2d5aee1a444c28af584ebf518ecce0706bb7949bc8eb3a0994ddfae953b9b3a3ceecf8a3110df2d91ff0e3dd11756aa3065a9fd9520d9ed3
7
- data.tar.gz: e3783cc55413014249911495625eb5f01efef58a5fe3acd9991d0d1a10bad45448a03d63d74ef778819003ee703ddabc936910b71c43ced6d6596bf92db17cbf
6
+ metadata.gz: 3a1ab2cb2da43f52f17080065d9a4616459a4ce23b39bb3ea39259cc35599e0325c5fd90077d62e785262de19c92512e95c41742d62f5cd8e9372d7a834ce3a2
7
+ data.tar.gz: 9524fb181330f10eeb4dc7c7eb31888c48a3c97003c7f47579749a00b59672b2148b59d2579ee75a1ea11dcab4626641ce51b7986e714dc177290ea4a0c2ca73
@@ -2,7 +2,7 @@ name: RSpec
2
2
 
3
3
  # Controls when the action will run. Triggers the workflow on push or pull request
4
4
  # events but only for the master branch
5
- on: [ push, pull_request ]
5
+ on: [push, pull_request]
6
6
 
7
7
  jobs:
8
8
  # This workflow contains a single job "rspec"
@@ -12,7 +12,7 @@ jobs:
12
12
 
13
13
  strategy:
14
14
  matrix:
15
- ruby_version: [ 2.6, 2.7, 3.0 ]
15
+ ruby_version: [2.6, 2.7, 3.0, 3.1, 3.2]
16
16
 
17
17
  # Steps represent a sequence of tasks that will be executed as part of the job
18
18
  steps:
@@ -36,6 +36,6 @@ jobs:
36
36
  key: ${{ runner.os }}-${{ matrix.ruby_version }}-gems-${{ hashFiles('**/Gemfile.lock') }}
37
37
  restore-keys: |
38
38
  ${{ runner.os }}-${{ matrix.ruby_version }}-gems-
39
-
39
+
40
40
  - name: Run RSpec
41
41
  run: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -1,6 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.0 (April 16th, 2023)
4
+
5
+ - Adds compatibility with graphql-ruby 2.0+. If you're still using an earlier version, you should stick to 1.4.x.
6
+
7
+ ### Deprecations
8
+
9
+ - The usage of the `#types` helper when writing tests (if you're not including `RSpec::GraphqlMatchers::TypesHelper` anywhere, you shoudn't have to change anything). Use `GraphQL::Types::<TYPE_NAME>` instead
10
+ - The usage of type instances as expected value for a type comparison is deprecated. Instead,
11
+ use the string that represents the type specification. Examples:
12
+
13
+ ```
14
+ # Bad - These are deprecated:
15
+ expect(a_type).to have_a_field(:lorem).of_type(GraphQL::Types::ID)
16
+ expect(a_type).to have_a_field(:lorem).of_type(Types::MyCustomType)
17
+
18
+ # Good - Use these instead
19
+ expect(a_type).to have_a_field(:lorem).of_type('ID')
20
+ expect(a_type).to have_a_field(:lorem).of_type('MyCustomType')
21
+ ```
22
+
23
+ The reason behind this change relies on the fact that we should have a decoupling between the
24
+ internal constants used to define our API and the public names exposed through it. If we test
25
+ a published API using the internal constants, it is possible to perform breaking changes by
26
+ renaming the graphql names of our types or entities without actually breaking the tests.
27
+
28
+ If we're performing a breaking change to a public API, we want our tests to fail.
29
+
30
+ ## 1.4.0 (April 16th, 2023)
31
+
32
+ - Removal of deprecated calls to #to_graphql, replacing them with #to_type_signature that was added in graphql-ruby 1.8.3 (https://github.com/khamusa/rspec-graphql_matchers/pull/43 @RobinDaugherty)
33
+ - Dropped support for legacy .define API
34
+ - Dropped support to old relay interfaces
35
+ - Fixed with_hash_key matcher for newer versions of graphql-ruby
36
+ - Fixed errors that occured in some edge cases when generating descriptions for accept_argument and have_a_field matchers
37
+ - Documentations improvement and general cleanup
38
+ - Dropped support to graphql-ruby versions before 1.10.12.
39
+
3
40
  ## 1.3.1 (Aug 2nd, 2021)
41
+
4
42
  - Corrected gem dependencies so it properly requires RSpec when loaded (thanks to @itay-grudev)
5
43
 
6
44
  ## 1.3.0 (May 7th, 2020)
data/Gemfile CHANGED
@@ -4,11 +4,3 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in rspec-graphql_matchers.gemspec
6
6
  gemspec
7
-
8
- # rubocop:disable Bundle/DuplicatedGem
9
- if ENV['GRAPHQL_GEM_VERSION'] == '1.8'
10
- gem 'graphql', '~> 1.8.0'
11
- elsif ENV['GRAPHQL_GEM_VERSION'] == '1.9'
12
- gem 'graphql', '~> 1.9.0'
13
- end
14
- # rubocop:enable Bundle/DuplicatedGem
data/README.md CHANGED
@@ -21,16 +21,9 @@ The matchers currently supported are:
21
21
  - `expect(a_field).to be_of_type(valid_type)`
22
22
  - `expect(an_input).to accept_argument(argument_name).of_type(valid_type)`
23
23
 
24
- Where a valid type for the expectation is either:
24
+ Where `valid_type` is a your type signature as a String: `"String!"`, `"Int!"`, `"[String]!"` (note the exclamation mark at the end, as required by the [GraphQL specifications](http://graphql.org/).
25
25
 
26
- - A reference to the actual type you expect;
27
- - [Recommended] A String representation of a type: `"String!"`, `"Int!"`, `"[String]!"`
28
- (note the exclamation mark at the end, as required by the [GraphQL specs](http://graphql.org/).
29
-
30
- For objects defined with the legacy `#define` api, testing `:property`, `:hash_key` and _metadata_ is also possible by chaining `.with_property`, `.with_hash_key` and `.with_metadata`. For example:
31
-
32
- - `expect(a_graphql_object).to have_a_field(field_name).with_property(property_name).with_metadata(metadata_hash)`
33
- - `expect(a_graphql_object).to have_a_field(field_name).with_hash_key(hash_key)`
26
+ Please note that using references to type instances is deprecated and will be removed in a future release.
34
27
 
35
28
  ## Examples
36
29
 
@@ -41,7 +34,7 @@ class PostType < GraphQL::Schema::Object
41
34
  graphql_name "Post"
42
35
  description "A blog post"
43
36
 
44
- implements GraphQL::Relay::Node.interface
37
+ implements GraphQL::Types::Relay::Node
45
38
 
46
39
  field :id, ID, null: false
47
40
  field :comments, [String], null: false
@@ -49,9 +42,9 @@ class PostType < GraphQL::Schema::Object
49
42
  field :published, Boolean, null: false, deprecation_reason: 'Use isPublished instead'
50
43
 
51
44
  field :subposts, PostType, null: true do
52
- argument :filter, types.String, required: false
53
- argument :id, types.ID, required: false
54
- argument :isPublished, types.Boolean, required: false
45
+ argument :filter, String, required: false
46
+ argument :id, ID, required: false
47
+ argument :isPublished, Boolean, required: false
55
48
  end
56
49
  end
57
50
  ```
@@ -62,7 +55,7 @@ end
62
55
  describe PostType do
63
56
  subject { described_class }
64
57
 
65
- it { is_expected.to have_field(:id).of_type(!types.ID) }
58
+ it { is_expected.to have_field(:id).of_type("ID!") }
66
59
  it { is_expected.to have_field(:comments).of_type("[String!]!") }
67
60
  it { is_expected.to have_field(:isPublished).of_type("Boolean") }
68
61
 
@@ -97,27 +90,7 @@ describe PostType do
97
90
  end
98
91
  ```
99
92
 
100
- ### 3) For objects defined using the legacy `#define` api, you can also use `with_property`, `with_hash_key` and `with_metadata`:
101
-
102
- ```ruby
103
- PostTypeWithDefineApi = GraphQL::ObjectType.define do
104
- name "DefinedPost"
105
-
106
- interfaces [GraphQL::Relay::Node.interface]
107
-
108
- field :id, !types.ID, property: :post_id
109
- field :comments, !types[types.String], hash_key: :post_comments
110
- field :isPublished, admin_only: true
111
- end
112
-
113
- describe PostTypeWithDefineApi do
114
- it { is_expected.to have_a_field(:id).of_type('ID!').with_property(:post_id) }
115
- it { is_expected.to have_a_field(:comments).with_hash_key(:post_comments) }
116
- it { is_expected.to have_a_field(:isPublished).with_metadata(admin_only: true) }
117
- end
118
- ```
119
-
120
- ### 4) Test the arguments accepted by a field with `accept_argument` matcher:
93
+ ### 3) Test the arguments accepted by a field with `accept_argument` matcher:
121
94
 
122
95
  ```ruby
123
96
  describe PostType do
@@ -138,7 +111,7 @@ describe PostType do
138
111
  end
139
112
  ```
140
113
 
141
- ### 5) Test an object's interface implementations:
114
+ ### 4) Test an object's interface implementations:
142
115
 
143
116
  ```ruby
144
117
  describe PostType do
@@ -148,13 +121,11 @@ describe PostType do
148
121
  expect(subject).to implement('Node')
149
122
  end
150
123
 
151
- # Accepts arguments as an array and type objects directly
152
- it { is_expected.to implement(GraphQL::Relay::Node.interface) }
153
124
  it { is_expected.not_to implement('OtherInterface') }
154
125
  end
155
126
  ```
156
127
 
157
- ### 6) Using camelize: false on field names
128
+ ### 5) Using camelize: false on field names
158
129
 
159
130
  By default the graphql gem camelizes field names. This gem deals with it transparently:
160
131
 
@@ -162,7 +133,7 @@ By default the graphql gem camelizes field names. This gem deals with it transpa
162
133
  class ObjectMessingWithCamelsAndSnakesType < GraphQL::Schema::Object
163
134
  graphql_name 'ObjectMessingWithCamelsAndSnakes'
164
135
 
165
- implements GraphQL::Relay::Node.interface
136
+ implements GraphQL::Types::Relay::Node
166
137
 
167
138
  field :me_gusta_los_camellos, ID, null: false
168
139
 
@@ -59,11 +59,11 @@ module RSpec
59
59
  private
60
60
 
61
61
  def descriptions
62
- @results.map(&:description)
62
+ results.map(&:description)
63
63
  end
64
64
 
65
65
  def failure_messages
66
- @results.map(&:failure_message)
66
+ results.map(&:failure_message)
67
67
  end
68
68
 
69
69
  def field_arguments
@@ -74,6 +74,10 @@ module RSpec
74
74
  'matcher. It does not seem to be a valid GraphQL object type.'
75
75
  end
76
76
  end
77
+
78
+ def results
79
+ @results ||= []
80
+ end
77
81
  end
78
82
  end
79
83
  end
@@ -40,7 +40,7 @@ module RSpec
40
40
 
41
41
  def describe_arguments(what_args)
42
42
  what_args.sort.map do |arg_name, arg_type|
43
- "#{arg_name}(#{arg_type})"
43
+ "#{arg_name}(#{type_name(arg_type)})"
44
44
  end.join(', ')
45
45
  end
46
46
  end
@@ -16,7 +16,7 @@ module RSpec
16
16
  end
17
17
 
18
18
  def type_name(a_type)
19
- a_type = a_type.to_graphql if a_type.respond_to?(:to_graphql)
19
+ a_type = a_type.to_type_signature if a_type.respond_to?(:to_type_signature)
20
20
 
21
21
  a_type.to_s
22
22
  end
@@ -17,7 +17,8 @@ module RSpec
17
17
  end
18
18
 
19
19
  def failure_message
20
- "expected field '#{member_name(sample)}' to be of type '#{expected}', " \
20
+ "expected field '#{member_name(sample)}' to " \
21
+ "be of type '#{type_name(expected)}', " \
21
22
  "but it was '#{type_name(sample.type)}'"
22
23
  end
23
24
 
@@ -28,9 +29,9 @@ module RSpec
28
29
  private
29
30
 
30
31
  def to_graphql(field_sample)
31
- return field_sample unless field_sample.respond_to?(:to_graphql)
32
+ return field_sample unless field_sample.respond_to?(:to_type_signature)
32
33
 
33
- field_sample.to_graphql
34
+ field_sample.to_type_signature
34
35
  end
35
36
  end
36
37
  end
@@ -80,16 +80,16 @@ module RSpec
80
80
  field = field_collection[@expected_field_name]
81
81
  field ||= field_collection[@expected_camel_field_name]
82
82
 
83
- field.respond_to?(:to_graphql) ? field.to_graphql : field
83
+ field.respond_to?(:to_type_signature) ? field.to_type_signature : field
84
84
  end
85
85
  end
86
86
 
87
87
  def descriptions
88
- @results.map(&:description)
88
+ results.map(&:description)
89
89
  end
90
90
 
91
91
  def failure_messages
92
- @results.map(&:failure_message)
92
+ results.map(&:failure_message)
93
93
  end
94
94
 
95
95
  def field_collection
@@ -103,11 +103,14 @@ module RSpec
103
103
 
104
104
  def matcher_name
105
105
  case @fields
106
- when :fields then 'have_a_field'
107
- when :input_fields then 'have_an_input_field'
108
- when :return_fields then 'have_a_return_field'
106
+ when :fields then 'have_a_field'
107
+ when :arguments then 'have_an_input_field'
109
108
  end
110
109
  end
110
+
111
+ def results
112
+ @results ||= []
113
+ end
111
114
  end
112
115
  end
113
116
  end
@@ -5,7 +5,7 @@ module RSpec
5
5
  module HaveAFieldMatchers
6
6
  class OfType < RSpec::GraphqlMatchers::BeOfType
7
7
  def description
8
- "of type `#{expected}`"
8
+ "of type `#{type_name(expected)}`"
9
9
  end
10
10
 
11
11
  def failure_message
@@ -28,7 +28,11 @@ module RSpec
28
28
  return actual_field.hash_key.to_sym if actual_field.hash_key
29
29
  end
30
30
 
31
- actual_field.metadata[:type_class].method_sym
31
+ if actual_field.respond_to?(:metadata)
32
+ return actual_field.metadata[:type_class].method_sym
33
+ end
34
+
35
+ actual_field.method_sym
32
36
  end
33
37
  end
34
38
  end
@@ -28,12 +28,12 @@ module RSpec
28
28
  alias have_field have_a_field
29
29
 
30
30
  def have_an_input_field(field_name)
31
- RSpec::GraphqlMatchers::HaveAField.new(field_name, :input_fields)
31
+ RSpec::GraphqlMatchers::HaveAField.new(field_name, :arguments)
32
32
  end
33
33
  alias have_input_field have_an_input_field
34
34
 
35
35
  def have_a_return_field(field_name)
36
- RSpec::GraphqlMatchers::HaveAField.new(field_name, :return_fields)
36
+ RSpec::GraphqlMatchers::HaveAField.new(field_name)
37
37
  end
38
38
  alias have_return_field have_a_return_field
39
39
  # rubocop:enable Naming/PredicateName
@@ -5,8 +5,20 @@ require 'graphql'
5
5
  module RSpec
6
6
  module GraphqlMatchers
7
7
  module TypesHelper
8
+ class << self
9
+ extend Gem::Deprecate
10
+
11
+ GraphQL::Types.constants.each do |constant_name|
12
+ klass = GraphQL::Types.const_get(constant_name)
13
+
14
+ define_method(constant_name) { klass }
15
+
16
+ deprecate constant_name, "GraphQL::Types::#{constant_name}", 2023, 10
17
+ end
18
+ end
19
+
8
20
  def types
9
- GraphQL::Define::TypeDefiner.instance
21
+ TypesHelper
10
22
  end
11
23
  end
12
24
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Rspec
4
4
  module GraphqlMatchers
5
- VERSION = '1.3.1'.freeze
5
+ VERSION = '2.0.0-rc.0'.freeze
6
6
  end
7
7
  end
@@ -14,9 +14,6 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = 'https://github.com/khamusa/rspec-graphql_matchers'
15
15
  spec.license = 'MIT'
16
16
 
17
- # raise 'RubyGems 2.0 or newer is required to protect against public gem ' \
18
- # 'pushes.'
19
-
20
17
  spec.files =
21
18
  `git ls-files -z`
22
19
  .split("\x0")
@@ -25,7 +22,7 @@ Gem::Specification.new do |spec|
25
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
23
  spec.require_paths = ['lib']
27
24
 
28
- spec.add_dependency 'graphql', '>= 1.8', '< 2.0'
25
+ spec.add_dependency 'graphql', '~> 2.0'
29
26
  spec.add_dependency 'rspec', '~> 3.0'
30
27
  spec.add_development_dependency 'bundler', '~> 2.0'
31
28
  # CodeClimate does not yet support SimpleCov 0.18
metadata CHANGED
@@ -1,33 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-graphql_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 2.0.0.pre.rc.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Brandão
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-11 00:00:00.000000000 Z
11
+ date: 2023-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '1.8'
20
- - - "<"
17
+ - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '2.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '1.8'
30
- - - "<"
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
26
  version: '2.0'
33
27
  - !ruby/object:Gem::Dependency
@@ -100,7 +94,7 @@ dependencies:
100
94
  - - '='
101
95
  - !ruby/object:Gem::Version
102
96
  version: '0.71'
103
- description:
97
+ description:
104
98
  email:
105
99
  - gb.samuel@gmail.com
106
100
  executables: []
@@ -141,7 +135,7 @@ homepage: https://github.com/khamusa/rspec-graphql_matchers
141
135
  licenses:
142
136
  - MIT
143
137
  metadata: {}
144
- post_install_message:
138
+ post_install_message:
145
139
  rdoc_options: []
146
140
  require_paths:
147
141
  - lib
@@ -152,12 +146,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
146
  version: '0'
153
147
  required_rubygems_version: !ruby/object:Gem::Requirement
154
148
  requirements:
155
- - - ">="
149
+ - - ">"
156
150
  - !ruby/object:Gem::Version
157
- version: '0'
151
+ version: 1.3.1
158
152
  requirements: []
159
- rubygems_version: 3.2.5
160
- signing_key:
153
+ rubygems_version: 3.3.7
154
+ signing_key:
161
155
  specification_version: 4
162
156
  summary: Collection of rspec matchers to test your graphQL api schema.
163
157
  test_files: []