pact-support 1.6.2 → 1.6.3

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
  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