pact 1.65.3 → 1.66.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 +4 -4
- data/CHANGELOG.md +14 -0
- data/lib/pact/provider/request.rb +11 -5
- data/lib/pact/provider/rspec.rb +5 -3
- data/lib/pact/provider/test_methods.rb +9 -3
- data/lib/pact/version.rb +1 -1
- data/pact.gemspec +3 -1
- metadata +35 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5f4cb5a83116a65cd755ec7d8e8ab48a07bbd9084854eafe8479ce619258d87
|
4
|
+
data.tar.gz: 453b876959da6e040739f461d53d342c5c76650720480f484694f4f40a67b3f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4de1c45268fdd6c77c7dddb4ea15235a8cc12604670acb8f64b95569dcbb64de4f1a81e8333e5ec640dcf0da6f90ed8463d34c9203f5c1260d689d16cf1ff81
|
7
|
+
data.tar.gz: 7d5c9e3124136d5604b821566a22f7967f1b2e3fb160ab6a15547462c25a28562b467ee029d6740f42047933d1d55c20c53b4b880f8ea0a86af46e3af1cfbe16
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
<a name="v1.66.0"></a>
|
2
|
+
### v1.66.0 (2024-11-29)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* **generators**
|
7
|
+
* Add more generators as per spec ([f55adf1](/../../commit/f55adf1))
|
8
|
+
* Pass context and add ProviderState generator ([7a1cf3b](/../../commit/7a1cf3b))
|
9
|
+
|
10
|
+
#### Bug Fixes
|
11
|
+
|
12
|
+
* add HTTPS_HOST header if invoking a Sinatra app ([ed44189](/../../commit/ed44189))
|
13
|
+
* example/animal-service/Gemfile to reduce vulnerabilities ([981ebee](/../../commit/981ebee))
|
14
|
+
|
1
15
|
<a name="v1.65.3"></a>
|
2
16
|
### v1.65.3 (2024-10-23)
|
3
17
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'pact/reification'
|
3
3
|
require 'pact/shared/null_expectation'
|
4
|
+
require 'pact/generators'
|
4
5
|
|
5
6
|
module Pact
|
6
7
|
module Provider
|
@@ -10,8 +11,9 @@ module Pact
|
|
10
11
|
# See https://github.com/rack/rack/blob/e7d741c6282ca4cf4e01506f5681e6e6b14c0b32/SPEC#L87-89
|
11
12
|
NO_HTTP_PREFIX = ["CONTENT-TYPE", "CONTENT-LENGTH"]
|
12
13
|
|
13
|
-
def initialize expected_request
|
14
|
+
def initialize expected_request, state_params = nil
|
14
15
|
@expected_request = expected_request
|
16
|
+
@state_params = state_params
|
15
17
|
end
|
16
18
|
|
17
19
|
def method
|
@@ -19,7 +21,7 @@ module Pact
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def path
|
22
|
-
expected_request.full_path
|
24
|
+
Pact::Generators.apply_generators(expected_request, "path", expected_request.full_path, @state_params)
|
23
25
|
end
|
24
26
|
|
25
27
|
def body
|
@@ -27,17 +29,21 @@ module Pact
|
|
27
29
|
when String then expected_request.body
|
28
30
|
when NullExpectation then ''
|
29
31
|
else
|
30
|
-
reified_body
|
32
|
+
Pact::Generators.apply_generators(expected_request, "body", reified_body, @state_params)
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
34
36
|
def headers
|
35
37
|
request_headers = {}
|
38
|
+
request_headers.merge!('HTTP_HOST' => 'localhost') if defined?(Sinatra)
|
36
39
|
return request_headers if expected_request.headers.is_a?(Pact::NullExpectation)
|
40
|
+
|
37
41
|
expected_request.headers.each do |key, value|
|
38
|
-
request_headers[
|
42
|
+
request_headers[key] = Pact::Reification.from_term(value)
|
39
43
|
end
|
40
|
-
|
44
|
+
|
45
|
+
request_headers = Pact::Generators.apply_generators(expected_request, "header", request_headers, @state_params)
|
46
|
+
request_headers.map{ |key,value| [rack_request_header_for(key), value]}.to_h
|
41
47
|
end
|
42
48
|
|
43
49
|
private
|
data/lib/pact/provider/rspec.rb
CHANGED
@@ -25,6 +25,7 @@ module Pact
|
|
25
25
|
pact_uri = pact_source.uri
|
26
26
|
Pact.configuration.output_stream.puts "INFO: Reading pact at #{pact_uri}"
|
27
27
|
consumer_contract = Pact::ConsumerContract.from_json(pact_json)
|
28
|
+
|
28
29
|
suffix = pact_uri.metadata[:pending] ? " [PENDING]": ""
|
29
30
|
example_group_description = "Verifying a pact between #{consumer_contract.consumer.name} and #{consumer_contract.provider.name}#{suffix}"
|
30
31
|
example_group_metadata = { pactfile_uri: pact_uri, pact_criteria: options[:criteria] }
|
@@ -77,7 +78,6 @@ module Pact
|
|
77
78
|
end
|
78
79
|
|
79
80
|
def describe_interaction interaction, options
|
80
|
-
|
81
81
|
# pact_uri and pact_interaction are used by
|
82
82
|
# Pact::Provider::RSpec::PactBrokerFormatter
|
83
83
|
|
@@ -103,8 +103,9 @@ module Pact
|
|
103
103
|
before do | example |
|
104
104
|
interaction_context.run_once :before do
|
105
105
|
Pact.configuration.logger.info "Running example '#{Pact::RSpec.full_description(example)}'"
|
106
|
-
set_up_provider_states interaction.provider_states, options[:consumer]
|
107
|
-
|
106
|
+
provider_states_result = set_up_provider_states interaction.provider_states, options[:consumer]
|
107
|
+
state_params = provider_states_result[interaction.provider_state];
|
108
|
+
replay_interaction interaction, options[:request_customizer], state_params
|
108
109
|
interaction_context.last_response = last_response
|
109
110
|
end
|
110
111
|
end
|
@@ -129,6 +130,7 @@ module Pact
|
|
129
130
|
include Pact::RSpec::Matchers
|
130
131
|
extend Pact::Matchers::Messages
|
131
132
|
|
133
|
+
|
132
134
|
let(:expected_contents) { expected_response.body[:contents].as_json }
|
133
135
|
let(:response) { interaction_context.last_response }
|
134
136
|
let(:differ) { Pact.configuration.body_differ_for_content_type diff_content_type }
|
@@ -14,8 +14,8 @@ module Pact
|
|
14
14
|
include Pact::Logging
|
15
15
|
include Rack::Test::Methods
|
16
16
|
|
17
|
-
def replay_interaction interaction, request_customizer = nil
|
18
|
-
request = Request::Replayable.new(interaction.request)
|
17
|
+
def replay_interaction interaction, request_customizer = nil, state_params = nil
|
18
|
+
request = Request::Replayable.new(interaction.request, state_params)
|
19
19
|
request = request_customizer.call(request, interaction) if request_customizer
|
20
20
|
args = [request.path, request.body, request.headers]
|
21
21
|
|
@@ -42,11 +42,17 @@ module Pact
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def set_up_provider_states provider_states, consumer, options = {}
|
45
|
+
provider_states_result = {};
|
45
46
|
# If there are no provider state, execute with an nil state to ensure global and base states are executed
|
46
47
|
Pact.configuration.provider_state_set_up.call(nil, consumer, options) if provider_states.nil? || provider_states.empty?
|
47
48
|
provider_states.each do | provider_state |
|
48
|
-
Pact.configuration.provider_state_set_up.call(provider_state.name, consumer, options.merge(params: provider_state.params))
|
49
|
+
result = Pact.configuration.provider_state_set_up.call(provider_state.name, consumer, options.merge(params: provider_state.params))
|
50
|
+
if result.is_a?(Hash)
|
51
|
+
provider_states_result[provider_state.name] = result
|
52
|
+
end
|
49
53
|
end
|
54
|
+
|
55
|
+
provider_states_result
|
50
56
|
end
|
51
57
|
|
52
58
|
def tear_down_provider_states provider_states, consumer, options = {}
|
data/lib/pact/version.rb
CHANGED
data/pact.gemspec
CHANGED
@@ -30,8 +30,10 @@ Gem::Specification.new do |gem|
|
|
30
30
|
gem.add_runtime_dependency 'rack-test', '>= 0.6.3', '< 3.0.0'
|
31
31
|
gem.add_runtime_dependency 'thor', '>= 0.20', '< 2.0'
|
32
32
|
gem.add_runtime_dependency "rainbow", '~> 3.1'
|
33
|
+
gem.add_runtime_dependency 'string_pattern', '~> 2.0'
|
34
|
+
gem.add_runtime_dependency 'jsonpath', '~> 1.0'
|
33
35
|
|
34
|
-
gem.add_runtime_dependency 'pact-support', '~> 1.
|
36
|
+
gem.add_runtime_dependency 'pact-support', '~> 1.19', '>= 1.19.0'
|
35
37
|
gem.add_runtime_dependency 'pact-mock_service', '~> 3.0', '>= 3.3.1'
|
36
38
|
|
37
39
|
gem.add_development_dependency 'rake', '~> 13.0'
|
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.
|
4
|
+
version: 1.66.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: 2024-
|
15
|
+
date: 2024-11-29 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rspec
|
@@ -82,26 +82,54 @@ dependencies:
|
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '3.1'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: string_pattern
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '2.0'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '2.0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: jsonpath
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '1.0'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '1.0'
|
85
113
|
- !ruby/object:Gem::Dependency
|
86
114
|
name: pact-support
|
87
115
|
requirement: !ruby/object:Gem::Requirement
|
88
116
|
requirements:
|
89
117
|
- - "~>"
|
90
118
|
- !ruby/object:Gem::Version
|
91
|
-
version: '1.
|
119
|
+
version: '1.19'
|
92
120
|
- - ">="
|
93
121
|
- !ruby/object:Gem::Version
|
94
|
-
version: 1.
|
122
|
+
version: 1.19.0
|
95
123
|
type: :runtime
|
96
124
|
prerelease: false
|
97
125
|
version_requirements: !ruby/object:Gem::Requirement
|
98
126
|
requirements:
|
99
127
|
- - "~>"
|
100
128
|
- !ruby/object:Gem::Version
|
101
|
-
version: '1.
|
129
|
+
version: '1.19'
|
102
130
|
- - ">="
|
103
131
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
132
|
+
version: 1.19.0
|
105
133
|
- !ruby/object:Gem::Dependency
|
106
134
|
name: pact-mock_service
|
107
135
|
requirement: !ruby/object:Gem::Requirement
|
@@ -433,7 +461,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
433
461
|
- !ruby/object:Gem::Version
|
434
462
|
version: '0'
|
435
463
|
requirements: []
|
436
|
-
rubygems_version: 3.5.
|
464
|
+
rubygems_version: 3.5.23
|
437
465
|
signing_key:
|
438
466
|
specification_version: 4
|
439
467
|
summary: Enables consumer driven contract testing, providing a mock service and DSL
|