pact 1.42.0 → 1.43.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: e4b327f444ffe97e8a904aa40ccdf20086de7507
4
- data.tar.gz: 4885272ca8b7b4eb1e3ebd8d5f995ec50fbb96b5
3
+ metadata.gz: b644026c464080ef14a4a202bbfe8106f5ece05a
4
+ data.tar.gz: b0fa73324f51d53bf0d51e1ec5adc1974fc20816
5
5
  SHA512:
6
- metadata.gz: 3e26230cf9736addab312532d9ca89bf519872b08d5a2b9a0934f4b033ca815b0c09c20f96b68fd43912621c634f6a0ca03dfc05b4475dfe6d229674c6c13f0b
7
- data.tar.gz: 5765ee8272e673040156be5cea50512bbfa613e93424260bb556bc412dded504ea25d3608f4a743bcb42b2febe4995cfe35e368c953f397c607d0ca73bb44df7
6
+ metadata.gz: 8ff57177c9bebdfa42fa14ff4a158f1a44c5eb52602c33b9d606065573fe0461649c271001676405cf09bd4da5e6e0b5a73845e797386a3199fd162a17edef13
7
+ data.tar.gz: c98d162e93e3c21d32eae05ec850bf2d6c42af63afb400ffa04d2813b2ce8364a91dfe0b6d06f713637d31e5913f62235d2e4dbbbfe1846ac4f2d099fd809d11
data/CHANGELOG.md CHANGED
@@ -1,3 +1,41 @@
1
+ <a name="v1.43.0"></a>
2
+ ### v1.43.0 (2020-01-11)
3
+
4
+
5
+ #### Features
6
+
7
+ * **verify**
8
+ * allow includePendingStatus to be specified when fetching pacts ([1f5fc9c](/../../commit/1f5fc9c))
9
+
10
+
11
+ <a name="v1.42.3"></a>
12
+ ### v1.42.3 (2019-11-15)
13
+
14
+
15
+ #### Bug Fixes
16
+
17
+ * **verify**
18
+ * exit with status 0 if all pacts are in pending state ([2f7110b](/../../commit/2f7110b))
19
+
20
+
21
+ <a name="v1.42.2"></a>
22
+ ### v1.42.2 (2019-11-09)
23
+
24
+
25
+ #### Bug Fixes
26
+
27
+ * remove missed &. ([be700d8](/../../commit/be700d8))
28
+
29
+
30
+ <a name="v1.42.1"></a>
31
+ ### v1.42.1 (2019-11-09)
32
+
33
+
34
+ #### Bug Fixes
35
+
36
+ * can't use safe navigation operator because of Ruby 2.2 in Travelling Ruby for the pact-ruby-standalone ([3068ceb](/../../commit/3068ceb))
37
+
38
+
1
39
  <a name="v1.42.0"></a>
2
40
  ### v1.42.0 (2019-09-26)
3
41
 
@@ -29,7 +29,7 @@ module Pact
29
29
 
30
30
  def after_suite
31
31
  if Pact.consumer_world.any_pact_examples_ran?
32
- Pact.consumer_world.consumer_contract_builders.each { | c | c.write_pact }
32
+ Pact.consumer_world.consumer_contract_builders.each(&:write_pact)
33
33
  Pact::Doc::Generate.call
34
34
  Pact::MockService::AppManager.instance.kill_all
35
35
  Pact::MockService::AppManager.instance.clear_all
@@ -37,4 +37,4 @@ module Pact
37
37
  end
38
38
  end
39
39
  end
40
- end
40
+ end
@@ -3,7 +3,7 @@ module Pact
3
3
  class SortInteractions
4
4
 
5
5
  def self.call interactions
6
- interactions.sort{|a, b| sortable_id(a) <=> sortable_id(b)}
6
+ interactions.sort_by { |interaction| sortable_id(interaction) }
7
7
  end
8
8
 
9
9
  private
@@ -11,7 +11,6 @@ module Pact
11
11
  def self.sortable_id interaction
12
12
  "#{interaction.description.downcase} #{interaction.response.status} #{(interaction.provider_state || '').downcase}"
13
13
  end
14
-
15
14
  end
16
15
  end
17
- end
16
+ end
data/lib/pact/hal/link.rb CHANGED
@@ -6,6 +6,15 @@ module Pact
6
6
  class Link
7
7
  attr_reader :request_method, :href
8
8
 
9
+ DEFAULT_GET_HEADERS = {
10
+ "Accept" => "application/hal+json"
11
+ }.freeze
12
+
13
+ DEFAULT_POST_HEADERS = {
14
+ "Accept" => "application/hal+json",
15
+ "Content-Type" => "application/json"
16
+ }.freeze
17
+
9
18
  def initialize(attrs, http_client)
10
19
  @attrs = attrs
11
20
  @request_method = attrs.fetch(:method, :get).to_sym
@@ -37,7 +46,7 @@ module Pact
37
46
  end
38
47
 
39
48
  def get(payload = {}, headers = {})
40
- wrap_response(href, @http_client.get(href, payload, headers))
49
+ wrap_response(href, @http_client.get(href, payload, DEFAULT_GET_HEADERS.merge(headers)))
41
50
  end
42
51
 
43
52
  def get!(*args)
@@ -45,11 +54,15 @@ module Pact
45
54
  end
46
55
 
47
56
  def put(payload = nil, headers = {})
48
- wrap_response(href, @http_client.put(href, payload ? payload.to_json : nil, headers))
57
+ wrap_response(href, @http_client.put(href, payload ? payload.to_json : nil, DEFAULT_POST_HEADERS.merge(headers)))
49
58
  end
50
59
 
51
60
  def post(payload = nil, headers = {})
52
- wrap_response(href, @http_client.post(href, payload ? payload.to_json : nil, headers))
61
+ wrap_response(href, @http_client.post(href, payload ? payload.to_json : nil, DEFAULT_POST_HEADERS.merge(headers)))
62
+ end
63
+
64
+ def post!(payload = nil, headers = {})
65
+ post(payload, headers).assert_success!
53
66
  end
54
67
 
55
68
  def expand(params)
@@ -7,7 +7,7 @@ require 'pact/pact_broker/fetch_pacts'
7
7
  module Pact
8
8
  module PactBroker
9
9
  class FetchPactURIsForVerification
10
- attr_reader :provider, :consumer_version_selectors, :provider_version_tags, :broker_base_url, :http_client_options, :http_client
10
+ attr_reader :provider, :consumer_version_selectors, :provider_version_tags, :broker_base_url, :http_client_options, :http_client, :options
11
11
 
12
12
  PACTS_FOR_VERIFICATION_RELATION = 'beta:provider-pacts-for-verification'.freeze
13
13
  PACTS = 'pacts'.freeze
@@ -16,17 +16,18 @@ module Pact
16
16
  SELF = 'self'.freeze
17
17
  EMBEDDED = '_embedded'.freeze
18
18
 
19
- def initialize(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options)
19
+ def initialize(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options, options = {})
20
20
  @provider = provider
21
- @consumer_version_selectors = consumer_version_selectors
22
- @provider_version_tags = provider_version_tags
21
+ @consumer_version_selectors = consumer_version_selectors || []
22
+ @provider_version_tags = provider_version_tags || []
23
23
  @http_client_options = http_client_options
24
24
  @broker_base_url = broker_base_url
25
25
  @http_client = Pact::Hal::HttpClient.new(http_client_options)
26
+ @options = options
26
27
  end
27
28
 
28
- def self.call(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options)
29
- new(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options).call
29
+ def self.call(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options, options = {})
30
+ new(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options, options).call
30
31
  end
31
32
 
32
33
  def call
@@ -50,8 +51,7 @@ module Pact
50
51
  pacts_for_verification_entity.response.body[EMBEDDED][PACTS].collect do | pact |
51
52
  metadata = {
52
53
  pending: pact["verificationProperties"]["pending"],
53
- pending_reason: pact["verificationProperties"]["pendingReason"],
54
- inclusion_reason: pact["verificationProperties"]["inclusionReason"],
54
+ notices: extract_notices(pact)
55
55
  }
56
56
  Pact::Provider::PactURI.new(pact[LINKS][SELF][HREF], http_client_options, metadata)
57
57
  end
@@ -61,26 +61,25 @@ module Pact
61
61
  index
62
62
  ._link(PACTS_FOR_VERIFICATION_RELATION)
63
63
  .expand(provider: provider)
64
- .with_query(query)
65
- .get!
64
+ .post!(query)
66
65
  end
67
66
 
68
67
  def query
69
68
  q = {}
70
- if consumer_version_selectors&.any?
71
- q["consumer_version_selectors"] = consumer_version_selectors
72
- end
73
-
74
- if provider_version_tags&.any?
75
- q["provider_version_tags"] = provider_version_tags
76
- end
69
+ q["includePendingStatus"] = true if options[:include_pending_status]
70
+ q["consumerVersionSelectors"] = consumer_version_selectors if consumer_version_selectors.any?
71
+ q["providerVersionTags"] = provider_version_tags if provider_version_tags.any?
77
72
  q
78
73
  end
79
74
 
75
+ def extract_notices(pact)
76
+ (pact["verificationProperties"]["notices"] || []).collect{ |notice| notice["text"] }.compact
77
+ end
78
+
80
79
  def log_message
81
- latest = consumer_version_selectors&.any? ? "" : "latest "
80
+ latest = consumer_version_selectors.any? ? "" : "latest "
82
81
  message = "INFO: Fetching #{latest}pacts for #{provider} from #{broker_base_url}"
83
- if consumer_version_selectors&.any?
82
+ if consumer_version_selectors.any?
84
83
  desc = consumer_version_selectors.collect do |selector|
85
84
  all_or_latest = selector[:all] ? "all" : "latest"
86
85
  # TODO support fallback
@@ -22,4 +22,3 @@ module Pact
22
22
  end
23
23
  end
24
24
  end
25
-
@@ -91,7 +91,7 @@ module Pact
91
91
  ::RSpec::Core::CommandLine.new(NoConfigurationOptions.new)
92
92
  .run(::RSpec.configuration.output_stream, ::RSpec.configuration.error_stream)
93
93
  end
94
- options[:ignore_failures] ? 0 : exit_code
94
+ (all_pacts_pending? || options[:ignore_failures]) ? 0 : exit_code
95
95
  end
96
96
 
97
97
  def rspec_runner_options
@@ -159,6 +159,10 @@ module Pact
159
159
  consumer_contract.to_json
160
160
  end
161
161
 
162
+ def all_pacts_pending?
163
+ pact_urls.all?{ | pact_url| pact_url.metadata[:pending] }
164
+ end
165
+
162
166
  def class_exists? name
163
167
  Kernel.const_get name
164
168
  rescue NameError
@@ -54,7 +54,7 @@ module Pact
54
54
  end
55
55
 
56
56
  def rack_request_header_for header
57
- with_http_prefix(header.to_s.upcase).gsub('-', '_')
57
+ with_http_prefix(header.to_s.upcase).tr('-', '_')
58
58
  end
59
59
 
60
60
  def rack_request_value_for value
@@ -76,7 +76,7 @@ module Pact
76
76
  pact_interaction: interaction,
77
77
  pact_interaction_example_description: interaction_description_for_rerun_command(interaction),
78
78
  pact_uri: options[:pact_uri],
79
- pact_ignore_failures: options[:pact_uri].metadata[:pending]
79
+ pact_ignore_failures: options[:pact_uri].metadata[:pending] || options[:ignore_failures]
80
80
  }
81
81
 
82
82
  describe description_for(interaction), metadata do
@@ -46,7 +46,7 @@ module Pact
46
46
  def tear_down_provider_states provider_states, consumer, options = {}
47
47
  # If there are no provider state, execute with an nil state to ensure global and base states are executed
48
48
  Pact.configuration.provider_state_tear_down.call(nil, consumer, options) if provider_states.nil? || provider_states.empty?
49
- provider_states.reverse.each do | provider_state |
49
+ provider_states.reverse_each do | provider_state |
50
50
  Pact.configuration.provider_state_tear_down.call(provider_state.name, consumer, options.merge(params: provider_state.params))
51
51
  end
52
52
  end
@@ -43,7 +43,7 @@ module Pact
43
43
  end
44
44
 
45
45
  def pact_uris_from_pact_uri_sources
46
- pact_uri_sources.collect{| pact_uri_source| pact_uri_source.call }.flatten
46
+ pact_uri_sources.collect(&:call).flatten
47
47
  end
48
48
  end
49
49
  end
data/lib/pact/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # Remember to bump pact-provider-proxy when this changes major version
2
2
  module Pact
3
- VERSION = "1.42.0"
3
+ VERSION = "1.43.0"
4
4
  end
data/pact.gemspec CHANGED
@@ -1,5 +1,4 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'pact/version'
5
4
 
@@ -15,22 +14,21 @@ Gem::Specification.new do |gem|
15
14
  gem.required_ruby_version = '>= 2.0'
16
15
 
17
16
  gem.files = `git ls-files bin lib pact.gemspec CHANGELOG.md LICENSE.txt`.split($/)
18
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
19
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
19
  gem.require_paths = ["lib"]
21
20
  gem.license = 'MIT'
22
21
 
23
22
  gem.metadata = {
23
+ 'changelog_uri' => 'https://github.com/pact-foundation/pact-ruby/blob/master/CHANGELOG.md',
24
24
  'source_code_uri' => 'https://github.com/pact-foundation/pact-ruby',
25
25
  'bug_tracker_uri' => 'https://github.com/pact-foundation/pact-ruby/issues',
26
26
  'documentation_uri' => 'https://github.com/pact-foundation/pact-ruby/blob/master/README.md'
27
27
  }
28
28
 
29
- gem.add_runtime_dependency 'randexp', '~> 0.1.7'
30
- gem.add_runtime_dependency 'rspec', '>=2.14'
29
+ gem.add_runtime_dependency 'rspec', '>= 2.14'
31
30
  gem.add_runtime_dependency 'rack-test', '>= 0.6.3', '< 2.0.0'
32
31
  gem.add_runtime_dependency 'thor'
33
- gem.add_runtime_dependency 'json','> 1.8.5'
34
32
  gem.add_runtime_dependency 'webrick'
35
33
  gem.add_runtime_dependency 'term-ansicolor', '~> 1.0'
36
34
 
@@ -39,7 +37,7 @@ Gem::Specification.new do |gem|
39
37
 
40
38
  gem.add_development_dependency 'rake', '~> 10.0.3'
41
39
  gem.add_development_dependency 'webmock', '~> 3.0'
42
- #gem.add_development_dependency 'pry-byebug'
40
+ gem.add_development_dependency 'pry-byebug'
43
41
  gem.add_development_dependency 'fakefs', '0.5' # 0.6.0 blows up
44
42
  gem.add_development_dependency 'hashie', '~> 2.0'
45
43
  gem.add_development_dependency 'activesupport'
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.42.0
4
+ version: 1.43.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Fraser
@@ -12,22 +12,8 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-09-26 00:00:00.000000000 Z
15
+ date: 2020-01-11 00:00:00.000000000 Z
16
16
  dependencies:
17
- - !ruby/object:Gem::Dependency
18
- name: randexp
19
- requirement: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - "~>"
22
- - !ruby/object:Gem::Version
23
- version: 0.1.7
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - "~>"
29
- - !ruby/object:Gem::Version
30
- version: 0.1.7
31
17
  - !ruby/object:Gem::Dependency
32
18
  name: rspec
33
19
  requirement: !ruby/object:Gem::Requirement
@@ -76,20 +62,6 @@ dependencies:
76
62
  - - ">="
77
63
  - !ruby/object:Gem::Version
78
64
  version: '0'
79
- - !ruby/object:Gem::Dependency
80
- name: json
81
- requirement: !ruby/object:Gem::Requirement
82
- requirements:
83
- - - ">"
84
- - !ruby/object:Gem::Version
85
- version: 1.8.5
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- requirements:
90
- - - ">"
91
- - !ruby/object:Gem::Version
92
- version: 1.8.5
93
65
  - !ruby/object:Gem::Dependency
94
66
  name: webrick
95
67
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +146,20 @@ dependencies:
174
146
  - - "~>"
175
147
  - !ruby/object:Gem::Version
176
148
  version: '3.0'
149
+ - !ruby/object:Gem::Dependency
150
+ name: pry-byebug
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
177
163
  - !ruby/object:Gem::Dependency
178
164
  name: fakefs
179
165
  requirement: !ruby/object:Gem::Requirement
@@ -381,6 +367,7 @@ homepage: https://github.com/pact-foundation/pact-ruby
381
367
  licenses:
382
368
  - MIT
383
369
  metadata:
370
+ changelog_uri: https://github.com/pact-foundation/pact-ruby/blob/master/CHANGELOG.md
384
371
  source_code_uri: https://github.com/pact-foundation/pact-ruby
385
372
  bug_tracker_uri: https://github.com/pact-foundation/pact-ruby/issues
386
373
  documentation_uri: https://github.com/pact-foundation/pact-ruby/blob/master/README.md