pact 1.4.0.rc3 → 1.4.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@ Do this to generate your change history
2
2
 
3
3
  git log --pretty=format:' * %h - %s (%an, %ad)'
4
4
 
5
+ ### 1.4.0.rc4 (22 October 2014)
6
+
7
+ * e56775a - Upgraded pact support gems to allow form bodies to be specified as Hashes with Pact::Terms (bethesque, Wed Oct 22 15:31:30 2014 +1100)
8
+
5
9
  ### 1.4.0.rc3 (17 October 2014)
6
10
 
7
11
  * 602906f - Upped pact-support version to allow queries specified as hashes. (bethesque, Fri Oct 17 14:30:39 2014 +1100)
data/Gemfile.lock CHANGED
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pact (1.4.0.rc3)
4
+ pact (1.4.0.rc4)
5
5
  awesome_print (~> 1.1)
6
6
  find_a_port (~> 1.0.1)
7
7
  json
8
- pact-mock_service (~> 0.0.1)
9
- pact-support (~> 0.0.3)
8
+ pact-mock_service (~> 0.1.0)
9
+ pact-support (~> 0.1.2)
10
10
  rack-test (~> 0.6.2)
11
11
  randexp (~> 0.1.7)
12
12
  rspec (>= 2.14)
@@ -39,17 +39,18 @@ GEM
39
39
  method_source (0.8.2)
40
40
  minitest (5.3.4)
41
41
  multipart-post (2.0.0)
42
- pact-mock_service (0.0.1)
42
+ pact-mock_service (0.1.0)
43
43
  awesome_print (~> 1.1)
44
44
  find_a_port (~> 1.0.1)
45
45
  json
46
+ pact-support (~> 0.1.1)
46
47
  rack
47
48
  rack-test (~> 0.6.2)
48
49
  rspec (>= 2.14)
49
50
  term-ansicolor (~> 1.0)
50
51
  thor
51
52
  webrick
52
- pact-support (0.0.3)
53
+ pact-support (0.1.2)
53
54
  awesome_print (~> 1.1)
54
55
  find_a_port (~> 1.0.1)
55
56
  json
@@ -71,7 +72,7 @@ GEM
71
72
  rspec-core (~> 3.1.0)
72
73
  rspec-expectations (~> 3.1.0)
73
74
  rspec-mocks (~> 3.1.0)
74
- rspec-core (3.1.6)
75
+ rspec-core (3.1.7)
75
76
  rspec-support (~> 3.1.0)
76
77
  rspec-expectations (3.1.2)
77
78
  diff-lcs (>= 1.2.0, < 2.0)
@@ -29,7 +29,7 @@ module Pact
29
29
  end
30
30
 
31
31
  def will_respond_with(response)
32
- interaction.response = response
32
+ interaction.response = Pact::Response.new(response)
33
33
  @callback.call interaction
34
34
  self
35
35
  end
@@ -37,15 +37,6 @@ module Pact
37
37
  @config_ru_path = config_ru_path
38
38
  end
39
39
 
40
- def color_enabled
41
- # Can't use ||= when the variable might be false, it will execute the expression if it's false
42
- defined?(@color_enabled) ? @color_enabled : true
43
- end
44
-
45
- def color_enabled= color_enabled
46
- @color_enabled = color_enabled
47
- end
48
-
49
40
  def include mod
50
41
  Pact::Provider::State::ProviderStateConfiguredModules.instance_eval do
51
42
  include mod
data/lib/pact/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pact
2
- VERSION = "1.4.0.rc3"
2
+ VERSION = "1.4.0.rc4"
3
3
  end
data/pact.gemspec CHANGED
@@ -28,8 +28,8 @@ 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', '~> 0.0.3'
32
- gem.add_runtime_dependency 'pact-mock_service', '~> 0.0.1'
31
+ gem.add_runtime_dependency 'pact-support', '~> 0.1.2'
32
+ gem.add_runtime_dependency 'pact-mock_service', '~> 0.1.0'
33
33
 
34
34
  gem.add_development_dependency 'rake', '~> 10.0.3'
35
35
  gem.add_development_dependency 'webmock', '~> 1.18.0'
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+ require 'net/http'
3
+ require 'pact/consumer'
4
+ require 'pact/consumer/rspec'
5
+ require 'faraday'
6
+ load 'pact/consumer/world.rb'
7
+
8
+ describe "A service consumer side of a pact", :pact => true do
9
+
10
+ let(:body) { 'That is some good Mallory.' }
11
+
12
+ context 'submitting a form specified as a Hash' do
13
+
14
+ before :all do
15
+ Pact.clear_configuration
16
+
17
+ Pact.service_consumer "Consumer" do
18
+ has_pact_with "Zebra Service" do
19
+ mock_service :zebra_service_4 do
20
+ port 1245
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ before do
27
+
28
+ zebra_service_4.
29
+ given("the zebras like using forms").
30
+ upon_receiving("a create Mallory request").with({
31
+ method: :post,
32
+ path: '/mallory',
33
+ headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
34
+ body: {
35
+ param1: Pact::Term.new(generate: 'woger', matcher: /w/),
36
+ param2: 'penguin'
37
+ }
38
+ }).
39
+ will_respond_with({
40
+ status: 200
41
+ })
42
+
43
+ end
44
+
45
+ let(:url) { zebra_service_4.mock_service_base_url + "/mallory" }
46
+ let(:response) { Faraday.post url, param2: 'penguin', param1: 'wiffle' }
47
+ let(:pact_json) { response; zebra_service_4.write_pact }
48
+
49
+ it "matches form data" do
50
+ expect(response.status).to eq 200
51
+ end
52
+
53
+ it "does not include any Pact::Terms" do
54
+ expect(pact_json).to_not include "Pact::Term"
55
+ end
56
+
57
+ it "includes the reified form" do
58
+ expect(pact_json).to include "param1=woger"
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'net/http'
3
+ require 'pact/consumer'
4
+ require 'pact/consumer/rspec'
5
+ require 'faraday'
6
+ load 'pact/consumer/world.rb'
7
+
8
+ describe "A service consumer side of a pact", :pact => true do
9
+
10
+ let(:body) { 'That is some good Mallory.' }
11
+
12
+ context 'submitting a form' do
13
+
14
+ before :all do
15
+ Pact.clear_configuration
16
+
17
+ Pact.service_consumer "Consumer" do
18
+ has_pact_with "Zebra Service" do
19
+ mock_service :zebra_service_3 do
20
+ port 1243
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ before do
27
+
28
+ zebra_service_3.
29
+ given("the zebras like using forms").
30
+ upon_receiving("a create Mallory request").with({
31
+ method: :post,
32
+ path: '/mallory',
33
+ headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
34
+ body: "param1=wiffle&param2=penguin"
35
+ }).
36
+ will_respond_with({
37
+ status: 200
38
+ })
39
+
40
+ end
41
+
42
+ let(:url) { zebra_service_3.mock_service_base_url + "/mallory" }
43
+
44
+ it "matches form data" do
45
+ response = Faraday.post url, param2: 'penguin', param1: 'wiffle'
46
+ expect(response.status).to eq 200
47
+ end
48
+
49
+ end
50
+ end
@@ -10,10 +10,10 @@ describe "A service consumer side of a pact", :pact => true do
10
10
  # Helper to make Faraday requests.
11
11
  # Faraday::FlatParamsEncoder may only be needed with our current version of Faraday 0.9
12
12
  # and ensures that when there are multiple parameters of the same name, they are encoded properly. e.g. colour=blue&colour=green
13
- def faraday_mallory(base_url,params)
13
+ def faraday_mallory(base_url,params, headers = {})
14
14
  (Faraday.new base_url, :request => {
15
15
  :params_encoder => Faraday::FlatParamsEncoder,
16
- }).get '/mallory', params, {'Accept' => 'application/json'}
16
+ }).get '/mallory', params, {'Accept' => 'application/json'}.merge(headers)
17
17
  end
18
18
 
19
19
  let(:body) { 'That is some good Mallory.' }
@@ -77,7 +77,7 @@ describe "A service consumer side of a pact", :pact => true do
77
77
 
78
78
  context "and a complex request matching Pact Terms and multiple instances of the same parameter" do
79
79
 
80
- it "goes like this" do
80
+ before :all do
81
81
  Pact.clear_configuration
82
82
  Pact.service_consumer "Consumer" do
83
83
  has_pact_with "Zebra Service" do
@@ -87,13 +87,16 @@ describe "A service consumer side of a pact", :pact => true do
87
87
  end
88
88
  end
89
89
  end
90
+ end
91
+
92
+ before do
90
93
  zebra_service.
91
94
  given(:the_zebras_are_here).
92
95
  upon_receiving("a retrieve Mallory request").
93
96
  with({
94
97
  method: :get,
95
98
  path: '/mallory',
96
- headers: {'Accept' => 'application/json'},
99
+ headers: {'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded'},
97
100
  query: { size: ['small',Pact::Term.new(matcher: /med.*/, generate: 'medium'),'large'], colour: 'brown', weight: '5'}
98
101
  }).
99
102
  will_respond_with({
@@ -101,11 +104,19 @@ describe "A service consumer side of a pact", :pact => true do
101
104
  headers: { 'Content-Type' => 'application/json' },
102
105
  body: Pact::Term.new(matcher: /Mallory/, generate: body)
103
106
  })
104
- response = faraday_mallory(zebra_service.mock_service_base_url, { weight: 5, size: ['small','medium','large'], colour: 'brown'})
105
- expect(response.body).to eq body
107
+ end
106
108
 
107
- interactions = Pact::ConsumerContract.from_json(zebra_service.write_pact).interactions
108
- expect(interactions.first.provider_state).to eq("the_zebras_are_here")
109
+ let(:response) do
110
+ faraday_mallory(
111
+ zebra_service.mock_service_base_url,
112
+ { weight: 5, size: ['small','medium','large'], colour: 'brown'},
113
+ {'Content-Type' => 'application/x-www-form-urlencoded'}
114
+ )
115
+ end
116
+
117
+ it "goes like this" do
118
+ expect(response.body).to eq body
109
119
  end
120
+
110
121
  end
111
122
  end
@@ -11,20 +11,7 @@ module Pact
11
11
 
12
12
  subject { Object.new.extend(ConfigurationExtension) }
13
13
 
14
- describe "#color_enabled" do
15
-
16
- it "sets color_enabled to be true by default" do
17
- expect(subject.color_enabled).to be true
18
- end
19
-
20
- it "allows configuration of colour_enabled" do
21
- subject.color_enabled = false
22
- expect(subject.color_enabled).to be false
23
- end
24
-
25
- end
26
-
27
14
  end
28
15
  end
29
16
  end
30
- end
17
+ end
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.0.rc3
4
+ version: 1.4.0.rc4
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-10-17 00:00:00.000000000 Z
16
+ date: 2014-10-22 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: randexp
@@ -166,7 +166,7 @@ dependencies:
166
166
  requirements:
167
167
  - - ~>
168
168
  - !ruby/object:Gem::Version
169
- version: 0.0.3
169
+ version: 0.1.2
170
170
  type: :runtime
171
171
  prerelease: false
172
172
  version_requirements: !ruby/object:Gem::Requirement
@@ -174,7 +174,7 @@ dependencies:
174
174
  requirements:
175
175
  - - ~>
176
176
  - !ruby/object:Gem::Version
177
- version: 0.0.3
177
+ version: 0.1.2
178
178
  - !ruby/object:Gem::Dependency
179
179
  name: pact-mock_service
180
180
  requirement: !ruby/object:Gem::Requirement
@@ -182,7 +182,7 @@ dependencies:
182
182
  requirements:
183
183
  - - ~>
184
184
  - !ruby/object:Gem::Version
185
- version: 0.0.1
185
+ version: 0.1.0
186
186
  type: :runtime
187
187
  prerelease: false
188
188
  version_requirements: !ruby/object:Gem::Requirement
@@ -190,7 +190,7 @@ dependencies:
190
190
  requirements:
191
191
  - - ~>
192
192
  - !ruby/object:Gem::Version
193
- version: 0.0.1
193
+ version: 0.1.0
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: rake
196
196
  requirement: !ruby/object:Gem::Requirement
@@ -423,6 +423,8 @@ files:
423
423
  - spec/integration/consumer_more_than_one_matching_interaction_spec.rb
424
424
  - spec/integration/consumer_no_matching_interaction_spec.rb
425
425
  - spec/integration/consumer_with_a_provider_state_spec.rb
426
+ - spec/integration/consumer_with_form_hash_spec.rb
427
+ - spec/integration/consumer_with_form_spec.rb
426
428
  - spec/integration/consumer_with_params_hash_spec.rb
427
429
  - spec/integration/pact/consumer_configuration_spec.rb
428
430
  - spec/integration/pact/provider_configuration_spec.rb
@@ -439,10 +441,7 @@ files:
439
441
  - spec/lib/pact/consumer/mock_service/interaction_replay_spec.rb
440
442
  - spec/lib/pact/consumer/mock_service/rack_request_helper_spec.rb
441
443
  - spec/lib/pact/consumer/mock_service/verification_get_spec.rb
442
- - spec/lib/pact/consumer/mock_service_client_spec.rb
443
- - spec/lib/pact/consumer/mock_service_interaction_expectation_spec.rb
444
444
  - spec/lib/pact/consumer/service_consumer_spec.rb
445
- - spec/lib/pact/consumer_contract/consumer_contract_writer_spec.rb
446
445
  - spec/lib/pact/doc/generator_spec.rb
447
446
  - spec/lib/pact/doc/interaction_view_model_spec.rb
448
447
  - spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb
@@ -511,7 +510,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
511
510
  version: '0'
512
511
  segments:
513
512
  - 0
514
- hash: 2688969630931365840
513
+ hash: 2889901042429282907
515
514
  required_rubygems_version: !ruby/object:Gem::Requirement
516
515
  none: false
517
516
  requirements:
@@ -534,6 +533,8 @@ test_files:
534
533
  - spec/integration/consumer_more_than_one_matching_interaction_spec.rb
535
534
  - spec/integration/consumer_no_matching_interaction_spec.rb
536
535
  - spec/integration/consumer_with_a_provider_state_spec.rb
536
+ - spec/integration/consumer_with_form_hash_spec.rb
537
+ - spec/integration/consumer_with_form_spec.rb
537
538
  - spec/integration/consumer_with_params_hash_spec.rb
538
539
  - spec/integration/pact/consumer_configuration_spec.rb
539
540
  - spec/integration/pact/provider_configuration_spec.rb
@@ -550,10 +551,7 @@ test_files:
550
551
  - spec/lib/pact/consumer/mock_service/interaction_replay_spec.rb
551
552
  - spec/lib/pact/consumer/mock_service/rack_request_helper_spec.rb
552
553
  - spec/lib/pact/consumer/mock_service/verification_get_spec.rb
553
- - spec/lib/pact/consumer/mock_service_client_spec.rb
554
- - spec/lib/pact/consumer/mock_service_interaction_expectation_spec.rb
555
554
  - spec/lib/pact/consumer/service_consumer_spec.rb
556
- - spec/lib/pact/consumer_contract/consumer_contract_writer_spec.rb
557
555
  - spec/lib/pact/doc/generator_spec.rb
558
556
  - spec/lib/pact/doc/interaction_view_model_spec.rb
559
557
  - spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/consumer/mock_service_client'
3
-
4
- module Pact
5
- module Consumer
6
- describe MockServiceClient do
7
-
8
- subject { MockServiceClient.new(4444) }
9
-
10
- let(:administration_headers) { {'X-Pact-Mock-Service' => 'true'} }
11
-
12
- describe "#add_expected_interaction" do
13
- let(:interaction) { InteractionFactory.create }
14
- let(:request_body) { MockServiceInteractionExpectation.new(interaction).to_json }
15
-
16
- context "when successful" do
17
- let!(:post_interaction) do
18
- stub_request(:post, "localhost:4444/interactions").
19
- with(body: request_body, headers: administration_headers.merge('Content-Type' => "application/json")).
20
- to_return(status: 200)
21
- end
22
-
23
- it "sets up the expected interaction on the mock server" do
24
- subject.add_expected_interaction interaction
25
- expect(post_interaction).to have_been_made
26
- end
27
- end
28
-
29
- end
30
-
31
- describe "#verify" do
32
-
33
- context "when all interactions are successfully verified" do
34
-
35
- let!(:get_verification) do
36
- stub_request(:get, "localhost:4444/interactions/verification?example_description=some%20example").
37
- with(headers: administration_headers).
38
- to_return(status: 200)
39
- end
40
-
41
- it "does not throw an error" do
42
- subject.verify "some example"
43
- expect(get_verification).to have_been_made
44
- end
45
- end
46
- end
47
-
48
- describe ".clear_interactions" do
49
- let!(:delete_verifications) do
50
- stub_request(:delete, "localhost:4444/interactions?example_description=some%20example").
51
- with(headers: administration_headers).
52
- to_return(status: 200)
53
- end
54
-
55
- it "deletes the interactions" do
56
- MockServiceClient.clear_interactions 4444, "some example"
57
- expect(delete_verifications).to have_been_made
58
- end
59
- end
60
-
61
- describe "#write_pact" do
62
- let(:consumer_contract_details) { {consumer: {name: 'Consumer'}, provider: {name: 'Provider'}, pactfile_write_mode: 'update'} }
63
- let(:pact) { {a: 'pact'}.to_json }
64
-
65
- let!(:post_pact) do
66
- stub_request(:post, "localhost:4444/pact").
67
- with(headers: administration_headers.merge('Content-Type' => "application/json"), body: consumer_contract_details).
68
- to_return(status: 200, body: pact)
69
- end
70
-
71
- it "deletes the interactions" do
72
- expect(subject.write_pact(consumer_contract_details)).to eq pact
73
- expect(post_pact).to have_been_made
74
- end
75
-
76
- end
77
-
78
- describe "#log" do
79
- it "sends a log request to the mock server"
80
- end
81
-
82
- describe "#wait_for_interactions" do
83
- it "waits until there are no missing interactions"
84
- end
85
- end
86
- end
87
- end
88
-
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/consumer/mock_service_interaction_expectation'
3
-
4
- describe Pact::Consumer::MockServiceInteractionExpectation do
5
- describe "as_json" do
6
-
7
- let(:options ) { {} }
8
- let(:request_as_json) { {a: 'request'} }
9
- let(:request) { instance_double('Pact::Request::Expected', :as_json => request_as_json, :options => options)}
10
- let(:response) { double('response') }
11
- let(:generated_response ) { double('generated_response', :to_json => 'generated_response') }
12
- let(:interaction) { instance_double('Pact::Interaction', :description => 'description', :request => request, :response => response, :provider_state => 'some state') }
13
- subject { described_class.new(interaction)}
14
- let(:expected_hash) { {:response => generated_response, :request => as_json_with_options, :description => '' } }
15
-
16
- before do
17
- allow(Pact::Reification).to receive(:from_term).with(response).and_return(generated_response)
18
- end
19
-
20
- it "includes the response" do
21
- expect(subject.as_json[:response]).to eq response
22
- end
23
-
24
- it "includes the options in the request" do
25
- expect(subject.as_json[:request]).to eq request_as_json
26
- end
27
-
28
- it "includes the provider state" do
29
- expect(subject.as_json[:provider_state]).to eq 'some state'
30
- end
31
-
32
- it "includes the description" do
33
- expect(subject.as_json[:description]).to eq 'description'
34
- end
35
-
36
- it "doesn't have any other keys" do
37
- expect(subject.as_json.keys).to eq [:description, :provider_state, :request, :response]
38
- end
39
-
40
- context "without options" do
41
- it "does not include the options key" do
42
- expect(subject.as_json.key?(:options)).to be false
43
- end
44
- end
45
-
46
- context "with options" do
47
- let(:options) { {:opts => 'blah'} }
48
- it "includes the options in the request hash" do
49
- expect(subject.as_json[:request][:options]).to eq options
50
- end
51
- end
52
- end
53
-
54
- end
@@ -1,111 +0,0 @@
1
- require 'spec_helper'
2
- require 'pact/consumer_contract/consumer_contract_writer'
3
-
4
- module Pact
5
-
6
- describe ConsumerContractWriter do
7
-
8
- let(:support_pact_file) { './spec/support/a_consumer-a_provider.json' }
9
- let(:consumer_name) { 'a consumer' }
10
- let(:provider_name) { 'a provider' }
11
-
12
- before do
13
- Pact.clear_configuration
14
- allow(Pact.configuration).to receive(:pact_dir).and_return(File.expand_path(tmp_pact_dir))
15
- FileUtils.rm_rf tmp_pact_dir
16
- FileUtils.mkdir_p tmp_pact_dir
17
- FileUtils.cp support_pact_file, "#{tmp_pact_dir}/a_consumer-a_provider.json"
18
- end
19
-
20
- let(:existing_interactions) { ConsumerContract.from_json(File.read(support_pact_file)).interactions }
21
- let(:new_interactions) { [InteractionFactory.create] }
22
- let(:tmp_pact_dir) {"./tmp/pacts"}
23
- let(:logger) { double("logger").as_null_object }
24
- let(:pactfile_write_mode) {:overwrite}
25
- let(:consumer_contract_details) {
26
- {
27
- consumer: {name: consumer_name},
28
- provider: {name: provider_name},
29
- pactfile_write_mode: pactfile_write_mode,
30
- interactions: new_interactions
31
- }
32
- }
33
-
34
- let(:consumer_contract_writer) { ConsumerContractWriter.new(consumer_contract_details, logger) }
35
-
36
- describe "consumer_contract" do
37
-
38
- let(:subject) { consumer_contract_writer.consumer_contract }
39
-
40
- context "when overwriting pact" do
41
-
42
- it "it uses only the interactions from the current test run" do
43
- expect(consumer_contract_writer.consumer_contract.interactions).to eq new_interactions
44
- end
45
-
46
- end
47
-
48
- context "when updating pact" do
49
-
50
- let(:pactfile_write_mode) {:update}
51
-
52
- it "merges the interactions from the current test run with the interactions from the existing file" do
53
- allow_any_instance_of(ConsumerContractWriter).to receive(:info_and_puts)
54
- expect(consumer_contract_writer.consumer_contract.interactions).to eq existing_interactions + new_interactions
55
- end
56
-
57
- let(:line0) { /\*/ }
58
- let(:line1) { /Updating existing file/ }
59
- let(:line2) { /Only interactions defined in this test run will be updated/ }
60
- let(:line3) { /As interactions are identified by description and provider state/ }
61
-
62
- it "logs a description message" do
63
- expect($stdout).to receive(:puts).with(line0).twice
64
- expect($stdout).to receive(:puts).with(line1)
65
- expect($stdout).to receive(:puts).with(line2)
66
- expect($stdout).to receive(:puts).with(line3)
67
- expect(logger).to receive(:info).with(line0).twice
68
- expect(logger).to receive(:info).with(line1)
69
- expect(logger).to receive(:info).with(line2)
70
- expect(logger).to receive(:info).with(line3)
71
- consumer_contract_writer.consumer_contract
72
- end
73
- end
74
-
75
- context "when an error occurs deserializing the existing pactfile" do
76
-
77
- let(:pactfile_write_mode) {:update}
78
- let(:error) { RuntimeError.new('some error')}
79
- let(:line1) { /Could not load existing consumer contract from .* due to some error/ }
80
- let(:line2) {'Creating a new file.'}
81
-
82
- before do
83
- allow(ConsumerContract).to receive(:from_json).and_raise(error)
84
- allow($stderr).to receive(:puts)
85
- allow(logger).to receive(:puts)
86
- end
87
-
88
- it "logs the error" do
89
- expect($stderr).to receive(:puts).with(line1)
90
- expect($stderr).to receive(:puts).with(line2)
91
- expect(logger).to receive(:warn).with(line1)
92
- expect(logger).to receive(:warn).with(line2)
93
- consumer_contract_writer.consumer_contract
94
- end
95
-
96
- it "uses the new interactions" do
97
- expect(consumer_contract_writer.consumer_contract.interactions).to eq new_interactions
98
- end
99
- end
100
- end
101
-
102
- describe "write" do
103
- it "writes the pact file" do
104
- expect_any_instance_of(ConsumerContract).to receive(:update_pactfile)
105
- consumer_contract_writer.write
106
- end
107
- end
108
-
109
- end
110
-
111
- end