pact 1.21.0 → 1.22.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
  SHA1:
3
- metadata.gz: 2aece3dcee5f119e9d84e091ed3509399cb4e1b2
4
- data.tar.gz: ba4ea1bb76866f1a12457c5bbc276774d77220c7
3
+ metadata.gz: 98e5eb1496b65c594ed13101b2fc458979b0dcc3
4
+ data.tar.gz: '091e47ad1474581a0d6d5fa47c6feded20b10d9a'
5
5
  SHA512:
6
- metadata.gz: da8af3dbfe258659facc5e384c5db79d43327796778bd85fadaf19894f19bffafada6b6fd2ccbdcbd6421a48ef6c970cea43208447c3ff00498f3f0537fb47b0
7
- data.tar.gz: 0b2b5f1f931bd65bb8e443cb512bca8e8772c2fdbcc139c12b67ec8742c42ab4e46bc3094f121d8847399b880d1771faa29dba47ce3eded737ea0ced55c7d43c
6
+ metadata.gz: 4b222248d8f3d7fc8b5dc5631945b1e44ae1ecb8175d5caea1efda1d57a2073d7e87cc874a52128ce750246170bf141fcb40dcfffb95d00e0f49fc65c1fb9e89
7
+ data.tar.gz: e65bd27bd345906792632cfa52a19d4c300e9bdfc3249229849d8ce04a36ff921d69feea8ba86272bbeac1f24bcce861ef213780b5c081d1f83c9e6627ba0e88
@@ -1,3 +1,13 @@
1
+ <a name="v1.22.0"></a>
2
+ ### v1.22.0 (2018-03-16)
3
+
4
+
5
+ #### Features
6
+
7
+ * do not create reports/pacts/help.md when executing verify from a wrapper language ([f1a2cd4](/../../commit/f1a2cd4))
8
+ * add support for verifying message pacts ([fa98102](/../../commit/fa98102))
9
+
10
+
1
11
  <a name="v1.21.0"></a>
2
12
  ### v1.21.0 (2018-03-19)
3
13
 
@@ -77,31 +77,52 @@ module Pact
77
77
 
78
78
  describe description_for(interaction), metadata do
79
79
 
80
- describe "with #{interaction.request.method_and_path}" do
81
-
82
- interaction_context = InteractionContext.new
83
-
84
- before do | example |
85
- interaction_context.run_once :before do
86
- Pact.configuration.logger.info "Running example '#{Pact::RSpec.full_description(example)}'"
87
- set_up_provider_state interaction.provider_state, options[:consumer]
88
- replay_interaction interaction
89
- interaction_context.last_response = last_response
90
- end
80
+ interaction_context = InteractionContext.new
81
+
82
+ before do | example |
83
+ interaction_context.run_once :before do
84
+ Pact.configuration.logger.info "Running example '#{Pact::RSpec.full_description(example)}'"
85
+ set_up_provider_state interaction.provider_state, options[:consumer]
86
+ replay_interaction interaction
87
+ interaction_context.last_response = last_response
91
88
  end
89
+ end
92
90
 
93
- after do
94
- interaction_context.run_once :after do
95
- tear_down_provider_state interaction.provider_state, options[:consumer]
96
- end
91
+ after do
92
+ interaction_context.run_once :after do
93
+ tear_down_provider_state interaction.provider_state, options[:consumer]
97
94
  end
98
-
99
- describe_response Pact::Response.new(interaction.response), interaction_context
100
-
101
95
  end
102
96
 
97
+ if interaction.respond_to?(:message?) && interaction.message?
98
+ describe_message Pact::Response.new(interaction.response), interaction_context
99
+ else
100
+ describe "with #{interaction.request.method_and_path}" do
101
+ describe_response Pact::Response.new(interaction.response), interaction_context
102
+ end
103
+ end
103
104
  end
105
+ end
104
106
 
107
+ def describe_message expected_response, interaction_context
108
+ include Pact::RSpec::Matchers
109
+ extend Pact::Matchers::Messages
110
+
111
+ let(:expected_content) { expected_response.body[:content] }
112
+ let(:response) { interaction_context.last_response }
113
+ let(:differ) { Pact.configuration.body_differ_for_content_type diff_content_type }
114
+ let(:diff_formatter) { Pact.configuration.diff_formatter_for_content_type diff_content_type }
115
+ let(:diff_options) { { with: differ, diff_formatter: diff_formatter } }
116
+ let(:diff_content_type) { 'application/json' }
117
+ let(:response_body) { parse_body_from_response(response) }
118
+ let(:actual_content) { response_body['content'] }
119
+
120
+ it "has matching content" do
121
+ if response.status != 200
122
+ raise "An error was raised while verifying the message. The response body is: #{response.body}"
123
+ end
124
+ expect(actual_content).to match_term expected_content, diff_options
125
+ end
105
126
  end
106
127
 
107
128
  def describe_response expected_response, interaction_context
@@ -124,7 +145,8 @@ module Pact
124
145
  let(:diff_options) { { with: differ, diff_formatter: diff_formatter } }
125
146
 
126
147
  if expected_response.status
127
- it "has status code #{expected_response.status}" do
148
+ it "has status code #{expected_response.status}" do | example |
149
+ set_metadata(example, :pact_actual_status, response_status)
128
150
  expect(response_status).to eql expected_response_status
129
151
  end
130
152
  end
@@ -132,7 +154,8 @@ module Pact
132
154
  if expected_response.headers
133
155
  describe "includes headers" do
134
156
  expected_response.headers.each do |name, expected_header_value|
135
- it "\"#{name}\" which #{expected_desc_for_it(expected_header_value)}" do
157
+ it "\"#{name}\" which #{expected_desc_for_it(expected_header_value)}" do | example |
158
+ set_metadata(example, :pact_actual_headers, response.headers)
136
159
  header_value = response.headers[name]
137
160
  expect(header_value).to match_header(name, expected_header_value)
138
161
  end
@@ -141,8 +164,9 @@ module Pact
141
164
  end
142
165
 
143
166
  if expected_response.body
144
- it "has a matching body" do
145
- expect(response_body).to match_term expected_response_body, diff_options
167
+ it "has a matching body" do | example |
168
+ set_metadata(example, :pact_actual_body, response_body)
169
+ expect(response_body).to match_term expected_response_body, diff_options, example
146
170
  end
147
171
  end
148
172
  end
@@ -155,7 +179,6 @@ module Pact
155
179
  def interaction_description_for_rerun_command interaction
156
180
  description_for(interaction).capitalize + ( interaction.provider_state ? " given #{interaction.provider_state}" : "")
157
181
  end
158
-
159
182
  end
160
183
 
161
184
  # The "arrange" and "act" parts of the test really only need to be run once,
@@ -4,11 +4,9 @@ require 'pact/provider/matchers/messages'
4
4
  require 'pact/rspec'
5
5
  require 'pact/shared/json_differ'
6
6
 
7
-
8
7
  module Pact
9
8
  module RSpec
10
9
  module Matchers
11
-
12
10
  module RSpec2Delegator
13
11
  # For backwards compatiblity with rspec-2
14
12
  def method_missing(method, *args, &block)
@@ -21,33 +19,40 @@ module Pact
21
19
  end
22
20
 
23
21
  class MatchTerm
24
-
25
22
  include Pact::Matchers::Messages
26
23
  include RSpec2Delegator
27
24
 
28
- def initialize expected, differ, diff_formatter
25
+ def initialize expected, differ, diff_formatter, example
29
26
  @expected = expected
30
27
  @differ = differ
31
28
  @diff_formatter = diff_formatter
29
+ @example = example
32
30
  end
33
31
 
34
32
  def matches? actual
35
33
  @actual = actual
36
- (@difference = @differ.call(@expected, @actual)).empty?
34
+ @difference = @differ.call(@expected, @actual)
35
+ unless @difference.empty?
36
+ Pact::RSpec.with_rspec_3 do
37
+ @example.metadata[:pact_diff] = @difference
38
+ end
39
+ Pact::RSpec.with_rspec_2 do
40
+ @example.example.metadata[:pact_diff] = @difference
41
+ end
42
+ end
43
+ @difference.empty?
37
44
  end
38
45
 
39
46
  def failure_message
40
47
  match_term_failure_message @difference, @actual, @diff_formatter, Pact::RSpec.color_enabled?
41
48
  end
42
-
43
49
  end
44
50
 
45
- def match_term expected, options
46
- MatchTerm.new(expected, options.fetch(:with), options.fetch(:diff_formatter))
51
+ def match_term expected, options, example
52
+ MatchTerm.new(expected, options.fetch(:with), options.fetch(:diff_formatter), example)
47
53
  end
48
54
 
49
55
  class MatchHeader
50
-
51
56
  include Pact::Matchers
52
57
  include Pact::Matchers::Messages
53
58
  include RSpec2Delegator
@@ -65,33 +70,11 @@ module Pact
65
70
  def failure_message
66
71
  match_header_failure_message @header_name, @expected, @actual
67
72
  end
68
-
69
73
  end
70
74
 
71
75
  def match_header header_name, expected
72
76
  MatchHeader.new(header_name, expected)
73
77
  end
74
-
75
78
  end
76
79
  end
77
80
  end
78
-
79
-
80
- # RSpec::Matchers.define :match_header do |header_name, expected|
81
-
82
- # include Pact::Matchers
83
- # include Pact::Matchers::Messages
84
-
85
- # match do |actual|
86
- # diff(expected, actual).empty?
87
- # end
88
-
89
- # def failure_message_for_should(actual)
90
- # match_header_failure_message header_name, expected, actual
91
- # end
92
-
93
- # # failure_message_for_should do | actual |
94
- # # match_header_failure_message header_name, expected, actual
95
- # # end
96
-
97
- # end
@@ -1,6 +1,7 @@
1
1
  require 'rspec/core/formatters'
2
2
  require 'pact/provider/verification_results/publish_all'
3
3
  require 'term/ansicolor'
4
+ require 'pact/matchers/extract_diff_messages'
4
5
 
5
6
  module Pact
6
7
  module Provider
@@ -59,6 +60,24 @@ module Pact
59
60
  message: ::Term::ANSIColor.uncolor(example.exception.message)
60
61
  }
61
62
  end
63
+
64
+ if example.metadata[:pact_actual_status]
65
+ hash[:actualStatus] = example.metadata[:pact_actual_status]
66
+ end
67
+
68
+ if example.metadata[:pact_actual_headers]
69
+ hash[:actualHeaders] = example.metadata[:pact_actual_headers]
70
+ end
71
+
72
+ if example.metadata[:pact_actual_body]
73
+ hash[:actualBody] = example.metadata[:pact_actual_body]
74
+ end
75
+
76
+ if example.metadata[:pact_diff]
77
+ hash[:differences] = Pact::Matchers::ExtractDiffMessages.call(example.metadata[:pact_diff])
78
+ .to_a
79
+ .collect{ | description | {description: description} }
80
+ end
62
81
  end
63
82
  end
64
83
  end
@@ -41,6 +41,16 @@ module Pact
41
41
  def tear_down_provider_state provider_state_name, consumer, options = {}
42
42
  Pact.configuration.provider_state_tear_down.call(provider_state_name, consumer, options)
43
43
  end
44
+
45
+ def set_metadata example, key, value
46
+ Pact::RSpec.with_rspec_3 do
47
+ example.metadata[key] = value
48
+ end
49
+
50
+ Pact::RSpec.with_rspec_2 do
51
+ example.example.metadata[key] = value
52
+ end
53
+ end
44
54
  end
45
55
  end
46
56
  end
@@ -47,7 +47,8 @@ module Pact
47
47
  end
48
48
 
49
49
  def all_interactions_count
50
- pact_source.pact_hash['interactions'].count
50
+ interactions = (pact_source.pact_hash['interactions'] || pact_source.pact_hash['messages'])
51
+ interactions ? interactions.count : 0
51
52
  end
52
53
 
53
54
  def test_results_hash_for_pact_uri
@@ -1,4 +1,4 @@
1
1
  # Remember to bump pact-provider-proxy when this changes major version
2
2
  module Pact
3
- VERSION = "1.21.0"
3
+ VERSION = "1.22.0"
4
4
  end
@@ -28,7 +28,7 @@ Gem::Specification.new do |gem|
28
28
  gem.add_runtime_dependency 'webrick'
29
29
  gem.add_runtime_dependency 'term-ansicolor', '~> 1.0'
30
30
 
31
- gem.add_runtime_dependency 'pact-support', '~> 1.3'
31
+ gem.add_runtime_dependency 'pact-support', '~> 1.4'
32
32
  gem.add_runtime_dependency 'pact-mock_service', '~> 2.0'
33
33
 
34
34
  gem.add_development_dependency 'rake', '~> 10.0.3'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.21.0
4
+ version: 1.22.0
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-03-18 00:00:00.000000000 Z
15
+ date: 2018-03-23 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: randexp
@@ -124,14 +124,14 @@ dependencies:
124
124
  requirements:
125
125
  - - "~>"
126
126
  - !ruby/object:Gem::Version
127
- version: '1.3'
127
+ version: '1.4'
128
128
  type: :runtime
129
129
  prerelease: false
130
130
  version_requirements: !ruby/object:Gem::Requirement
131
131
  requirements:
132
132
  - - "~>"
133
133
  - !ruby/object:Gem::Version
134
- version: '1.3'
134
+ version: '1.4'
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: pact-mock_service
137
137
  requirement: !ruby/object:Gem::Requirement