pact-support 1.6.2 → 1.6.3

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
  SHA1:
3
- metadata.gz: 7052ae315f37af6ae3f7ea9d1996f8cbb12ea7d0
4
- data.tar.gz: 648fff2d0659c82cca19046f1c5440f86e9cf2ab
3
+ metadata.gz: add17cb769a9dad8275e79e1320049e8134bfc0a
4
+ data.tar.gz: 92d453de103d3ee753736b80c0de57f4323b0725
5
5
  SHA512:
6
- metadata.gz: 9c2f5d2b7f6c792582eeaf03a70446aff2c3d67395a4b6448c11fbd6a38e9fbb6538f0b206b1cf297b923cbc7c0d977854160d412f6e0b540f36bae250f8e420
7
- data.tar.gz: 516d17b3b6c5b8590b264d934334dcdd6c8360e19a9581390f8e6353f17407ca098d63bedf35f213615e1076214d743eb03196063e7166fe56bb781698af1a77
6
+ metadata.gz: 4c8c8ccfc4a3a9884b600ac349ffbdb5eee0934867cedf32ae5f6a62919d573d6a383dae9ee675d471b425d6591bc1a0a07b2b1bee1729027ff5a8100963c14f
7
+ data.tar.gz: c81c6c65b68b03cb5867e0fc94bf6df9fd849a881fc9936b14c13ec73fea4d1d967e7fdb73b2b5e77208dbe04d0e1a9cfdfffe17f08d80a04b1706e67ba74fd4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ <a name="v1.6.3"></a>
2
+ ### v1.6.3 (2018-07-12)
3
+
4
+
5
+ #### Bug Fixes
6
+
7
+ * remove incorrect warning about ignoring unsupported matching rules for min => x ([50d5f6d](/../../commit/50d5f6d))
8
+ * serialize ArrayLike in query params without wrapping another array around it ([b4a9ec7](/../../commit/b4a9ec7))
9
+
10
+
1
11
  <a name="v1.6.2"></a>
2
12
  ### v1.6.2 (2018-05-31)
3
13
 
@@ -56,6 +56,8 @@ module Pact
56
56
  def insert(hash, k, v)
57
57
  if Hash === v
58
58
  v.each {|k2, v2| insert(hash, :"#{k}[#{k2}]", v2) }
59
+ elsif Pact::ArrayLike === v
60
+ hash[k.to_sym] = v
59
61
  else
60
62
  hash[k.to_sym] = [*v]
61
63
  end
@@ -13,11 +13,12 @@ module Pact
13
13
  @expected = expected
14
14
  @matching_rules = standardise_paths(matching_rules)
15
15
  @root_path = JsonPath.new(root_path).to_s
16
+ @used_rules = []
16
17
  end
17
18
 
18
19
  def call
19
20
  return @expected if @matching_rules.nil? || @matching_rules.empty?
20
- recurse @expected, @root_path
21
+ recurse(@expected, @root_path).tap { log_ignored_rules }
21
22
  end
22
23
 
23
24
  private
@@ -46,14 +47,18 @@ module Pact
46
47
  end
47
48
 
48
49
  def recurse_array array, path
50
+ parent_match_rule = find_rule(path, 'match')
51
+ log_used_rule(path, 'match', parent_match_rule) if parent_match_rule
52
+
49
53
  array_like_children_path = "#{path}[*]*"
50
- parent_match_rule = @matching_rules[path] && @matching_rules[path]['match']
51
- children_match_rule = @matching_rules[array_like_children_path] && @matching_rules[array_like_children_path]['match']
52
- min = @matching_rules[path] && @matching_rules[path]['min']
54
+ children_match_rule = find_rule(array_like_children_path, 'match')
55
+ log_used_rule(array_like_children_path, 'match', children_match_rule) if children_match_rule
56
+
57
+ min = find_rule(path, 'min')
58
+ log_used_rule(path, 'min', min) if min
53
59
 
54
60
  if min && (children_match_rule == 'type' || (children_match_rule.nil? && parent_match_rule == 'type'))
55
61
  warn_when_not_one_example_item(array, path)
56
- # log_ignored_rules(path, @matching_rules[path], {'min' => min})
57
62
  Pact::ArrayLike.new(recurse(array.first, "#{path}[*]"), min: min)
58
63
  else
59
64
  new_array = []
@@ -81,30 +86,41 @@ module Pact
81
86
  elsif rules['regex']
82
87
  handle_regex(object, path, rules)
83
88
  else
84
- log_ignored_rules(path, rules, {})
85
89
  object
86
90
  end
87
91
  end
88
92
 
89
93
  def handle_match_type object, path, rules
90
- log_ignored_rules(path, rules, {'match' => 'type'})
94
+ log_used_rule(path, 'match', 'type')
91
95
  Pact::SomethingLike.new(object)
92
96
  end
93
97
 
94
98
  def handle_regex object, path, rules
95
- log_ignored_rules(path, rules, {'match' => 'regex', 'regex' => rules['regex']})
99
+ log_used_rule(path, 'match', 'regex') # assumed to be present
100
+ log_used_rule(path, 'regex', rules['regex'])
96
101
  Pact::Term.new(generate: object, matcher: Regexp.new(rules['regex']))
97
102
  end
98
103
 
99
- def log_ignored_rules path, rules, used_rules
100
- dup_rules = rules.dup
101
- used_rules.each_pair do | used_key, used_value |
102
- dup_rules.delete(used_key) if dup_rules[used_key] == used_value
104
+ def log_ignored_rules
105
+ dup_rules = @matching_rules.dup
106
+ @used_rules.each do | (path, key, value) |
107
+ dup_rules[path].delete(key) if dup_rules[path][key] == value
103
108
  end
109
+
104
110
  if dup_rules.any?
105
- $stderr.puts "WARN: Ignoring unsupported matching rules #{dup_rules} for path #{path}"
111
+ dup_rules.each do | path, rules |
112
+ $stderr.puts "WARN: Ignoring unsupported matching rules #{rules} for path #{path}" if rules.any?
113
+ end
106
114
  end
107
115
  end
116
+
117
+ def find_rule(path, key)
118
+ @matching_rules[path] && @matching_rules[path][key]
119
+ end
120
+
121
+ def log_used_rule path, key, value
122
+ @used_rules << [path, key, value]
123
+ end
108
124
  end
109
125
  end
110
126
  end
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module Support
3
- VERSION = "1.6.2"
3
+ VERSION = "1.6.3"
4
4
  end
5
5
  end
@@ -82,6 +82,20 @@ module Pact
82
82
  end
83
83
 
84
84
  describe "#to_json" do
85
+ context "when the query contains an ArrayLike" do
86
+ let(:query) { { foo: Pact.each_like("1"), bar: "2" } }
87
+ let(:expected_json) do
88
+ {
89
+ foo: Pact.each_like("1"),
90
+ bar: ["2"]
91
+ }.to_json
92
+ end
93
+
94
+ it "serialises the ArrayLike without wrapping an array around it" do
95
+ expect(subject.to_json).to eq expected_json
96
+ end
97
+ end
98
+
85
99
  context "when the query contains a Pact::Term" do
86
100
  let(:term) { Pact::Term.new(generate: "thing", matcher: /th/) }
87
101
  let(:query) { { param: term } }
@@ -7,10 +7,16 @@ module Pact
7
7
  subject { Merge.(expected, matching_rules, "$.body") }
8
8
 
9
9
  before do
10
- allow($stderr).to receive(:puts)
10
+ allow($stderr).to receive(:puts) do | message |
11
+ raise "Was not expecting stderr to receive #{message.inspect} in this spec. This may be because of a missed call to log_used_rule in Merge."
12
+ end
11
13
  end
12
14
 
13
15
  describe "no recognised rules" do
16
+ before do
17
+ allow($stderr).to receive(:puts)
18
+ end
19
+
14
20
  let(:expected) do
15
21
  {
16
22
  "_links" => {
@@ -63,6 +69,10 @@ module Pact
63
69
  end
64
70
 
65
71
  describe "type based matching" do
72
+ before do
73
+ allow($stderr).to receive(:puts)
74
+ end
75
+
66
76
  let(:expected) do
67
77
  {
68
78
  "name" => "Mary"
@@ -89,6 +99,10 @@ module Pact
89
99
  describe "regular expressions" do
90
100
 
91
101
  describe "in a hash" do
102
+ before do
103
+ allow($stderr).to receive(:puts)
104
+ end
105
+
92
106
  let(:expected) do
93
107
  {
94
108
  "_links" => {
@@ -178,6 +192,7 @@ module Pact
178
192
  "$.body.alligators[*].*" => { 'match' => 'type'}
179
193
  }
180
194
  end
195
+
181
196
  it "creates a Pact::ArrayLike at the appropriate path" do
182
197
  expect(subject["alligators"]).to be_instance_of(Pact::ArrayLike)
183
198
  expect(subject["alligators"].contents).to eq 'name' => 'Mary'
@@ -259,6 +274,10 @@ module Pact
259
274
  end
260
275
 
261
276
  describe "with an example array with more than one item" do
277
+ before do
278
+ allow(Pact.configuration.error_stream).to receive(:puts)
279
+ end
280
+
262
281
  let(:expected) do
263
282
  {
264
283
 
@@ -277,13 +296,7 @@ module Pact
277
296
  }
278
297
  end
279
298
 
280
- xit "doesn't warn about the min size being ignored" do
281
- expect(Pact.configuration.error_stream).to receive(:puts).once
282
- subject
283
- end
284
-
285
299
  it "warns that the other items will be ignored" do
286
- allow(Pact.configuration.error_stream).to receive(:puts)
287
300
  expect(Pact.configuration.error_stream).to receive(:puts).with(/WARN: Only the first item/)
288
301
  subject
289
302
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Fraser
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2018-05-31 00:00:00.000000000 Z
15
+ date: 2018-07-12 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: randexp