rspec-graphql_matchers 1.2.1 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e5dc9d71a93c8f0a762604ae835b0334ce1a7ecda6283a940a6b1a834afb81c
4
- data.tar.gz: 2f119e9bc7d6b33c7ab1c307504a1f842dae6b6255007d6148a869569493b5f3
3
+ metadata.gz: 9b3cd22e67266948bf838945b0330bf050d19c44a4e336cfcd2fec2ad629350f
4
+ data.tar.gz: 14637372879e218e39922e323614d47426a93370425ed083b94dbec8ed597340
5
5
  SHA512:
6
- metadata.gz: eecf40946e48ee1d4bb0cb8ae1266902c3897e8d563a772501540945ca897d4a8c9908485c6979ba3a76ffe7ece12c216ed2383c20171372f3bed4c98df66d19
7
- data.tar.gz: f50e95f77105b2d64645a13f75b1735439176eece7991286785450a1faafa73f47c96277776ad59a5aa4c5acd16ffc85af64006c6a7e89a2029bb0dfbad74534
6
+ metadata.gz: 0bc45acd938927b143eb669e042f5ebcd6758be29602761d31b3101e77d722a66cbc896459f326fa9a44779bd1f6139c0e23b9a0f3d6e31418d6feb90526e58c
7
+ data.tar.gz: e011517e436af44e654b31847d561c2f588a5a12315d06235dbd2ad0d12770a7281e242d73c13772565c0885dc05ecd0fc7bdb19824365a3c7583c6c5dd74522
@@ -1,12 +1,9 @@
1
1
  # Changelog
2
2
 
3
- ### Breaking changes
4
-
5
- ### Deprecations
3
+ ## 1.3.0 (May 7th, 2020)
6
4
 
7
- ### New features
8
-
9
- ### Bug fixes
5
+ - `accept_argument` matcher accepts underscored argument names and passes even if the actual argument is camel-cased (https://github.com/khamusa/rspec-graphql_matchers/pull/32 thanks to @TonyArra);
6
+ - `have_a_field` matcher accepts `.with_deprecation_reason` (https://github.com/khamusa/rspec-graphql_matchers/pull/34 thanks to @TonyArra).
10
7
 
11
8
  ## 1.2.1 (March 31st, 2020)
12
9
 
data/README.md CHANGED
@@ -46,10 +46,12 @@ class PostType < GraphQL::Schema::Object
46
46
  field :id, ID, null: false
47
47
  field :comments, [String], null: false
48
48
  field :isPublished, Boolean, null: true
49
+ field :published, Boolean, null: false, deprecation_reason: 'Use isPublished instead'
49
50
 
50
51
  field :subposts, PostType, null: true do
51
52
  argument :filter, types.String, required: false
52
53
  argument :id, types.ID, required: false
54
+ argument :isPublished, types.Boolean, required: false
53
55
  end
54
56
  end
55
57
  ```
@@ -64,6 +66,12 @@ describe PostType do
64
66
  it { is_expected.to have_field(:comments).of_type("[String!]!") }
65
67
  it { is_expected.to have_field(:isPublished).of_type("Boolean") }
66
68
 
69
+ # Check a field is deprecated
70
+ it { is_expected.to have_field(:published).with_deprecation_reason }
71
+ it { is_expected.to have_field(:published).with_deprecation_reason('Use isPublished instead') }
72
+ it { is_expected.not_to have_field(:published).with_deprecation_reason('Wrong reason') }
73
+ it { is_expected.not_to have_field(:isPublished).with_deprecation_reason }
74
+
67
75
  # The gem automatically converts field names to CamelCase, so this will
68
76
  # pass even though the field was defined as field :isPublished
69
77
  it { is_expected.to have_field(:is_published).of_type("Boolean") }
@@ -122,6 +130,10 @@ describe PostType do
122
130
  end
123
131
 
124
132
  it { is_expected.not_to accept_argument(:weirdo) }
133
+
134
+ # The gem automatically converts argument names to CamelCase, so this will
135
+ # pass even though the argument was defined as :isPublished
136
+ it { is_expected.to accept_argument(:is_published).of_type("Boolean") }
125
137
  end
126
138
  end
127
139
  ```
@@ -17,12 +17,16 @@ module RSpec
17
17
  end
18
18
 
19
19
  @expected_arg_name = expected_arg_name.to_s
20
+ @expected_camel_arg_name = GraphQL::Schema::Member::BuildType.camelize(
21
+ @expected_arg_name
22
+ )
20
23
  end
21
24
 
22
25
  def matches?(graph_object)
23
26
  @graph_object = graph_object
24
27
 
25
28
  @actual_argument = field_arguments[@expected_arg_name]
29
+ @actual_argument ||= field_arguments[@expected_camel_arg_name]
26
30
  return false if @actual_argument.nil?
27
31
 
28
32
  @results = @expectations.select do |matcher|
@@ -29,7 +29,9 @@ module RSpec
29
29
  private
30
30
 
31
31
  def matches_argument?(arg_name, arg_type)
32
+ camel_arg_name = GraphQL::Schema::Member::BuildType.camelize(arg_name.to_s)
32
33
  actual_arg = actual_field.arguments[arg_name.to_s]
34
+ actual_arg ||= actual_field.arguments[camel_arg_name]
33
35
 
34
36
  actual_arg && types_match?(actual_arg.type, arg_type)
35
37
  end
@@ -5,6 +5,7 @@ require_relative './have_a_field_matchers/of_type'
5
5
  require_relative './have_a_field_matchers/with_property'
6
6
  require_relative './have_a_field_matchers/with_metadata'
7
7
  require_relative './have_a_field_matchers/with_hash_key'
8
+ require_relative './have_a_field_matchers/with_deprecation_reason'
8
9
 
9
10
  module RSpec
10
11
  module GraphqlMatchers
@@ -54,6 +55,11 @@ module RSpec
54
55
  self
55
56
  end
56
57
 
58
+ def with_deprecation_reason(expected_reason = nil)
59
+ @expectations << HaveAFieldMatchers::WithDeprecationReason.new(expected_reason)
60
+ self
61
+ end
62
+
57
63
  def failure_message
58
64
  base_msg = "expected #{member_name(@graph_object)} " \
59
65
  "to define field `#{@expected_field_name}`" \
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module GraphqlMatchers
5
+ module HaveAFieldMatchers
6
+ class WithDeprecationReason
7
+ def initialize(expected_reason)
8
+ @expected_reason = expected_reason
9
+ end
10
+
11
+ def matches?(actual_field)
12
+ @actual_reason = actual_field.deprecation_reason
13
+
14
+ if @expected_reason.nil?
15
+ !actual_field.deprecation_reason.nil?
16
+ else
17
+ actual_field.deprecation_reason == @expected_reason
18
+ end
19
+ end
20
+
21
+ def failure_message
22
+ message = "#{description}, but it was "
23
+ message + (@actual_reason.nil? ? 'not deprecated' : "`#{@actual_reason}`")
24
+ end
25
+
26
+ def description
27
+ if @expected_reason.nil?
28
+ 'with a deprecation reason'
29
+ else
30
+ "with deprecation reason `#{@expected_reason}`"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Rspec
4
4
  module GraphqlMatchers
5
- VERSION = '1.2.1'
5
+ VERSION = '1.3.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-graphql_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Brandão
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-31 00:00:00.000000000 Z
11
+ date: 2020-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql
@@ -114,6 +114,7 @@ files:
114
114
  - lib/rspec/graphql_matchers/be_of_type.rb
115
115
  - lib/rspec/graphql_matchers/have_a_field.rb
116
116
  - lib/rspec/graphql_matchers/have_a_field_matchers/of_type.rb
117
+ - lib/rspec/graphql_matchers/have_a_field_matchers/with_deprecation_reason.rb
117
118
  - lib/rspec/graphql_matchers/have_a_field_matchers/with_hash_key.rb
118
119
  - lib/rspec/graphql_matchers/have_a_field_matchers/with_metadata.rb
119
120
  - lib/rspec/graphql_matchers/have_a_field_matchers/with_property.rb
@@ -142,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
143
  version: '0'
143
144
  requirements: []
144
145
  rubyforge_project:
145
- rubygems_version: 2.7.8
146
+ rubygems_version: 2.7.10
146
147
  signing_key:
147
148
  specification_version: 4
148
149
  summary: Collection of rspec matchers to test your graphQL api schema.