pact 1.0.30 → 1.0.31
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.
- data/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/Gemfile.lock +0 -7
- data/README.md +50 -53
- data/Rakefile +1 -25
- data/documentation/Testing with pact.png +0 -0
- data/documentation/faq.md +45 -0
- data/documentation/raq.md +39 -0
- data/documentation/terminology.md +25 -0
- data/example/animal-service/Gemfile +4 -4
- data/example/animal-service/Gemfile.lock +20 -15
- data/example/animal-service/Rakefile +1 -1
- data/example/animal-service/config.ru +3 -0
- data/example/animal-service/db/animal_db.sqlite3 +0 -0
- data/example/animal-service/db/animals_db.sqlite3 +0 -0
- data/example/animal-service/lib/animal_service/animal_repository.rb +16 -0
- data/example/animal-service/lib/animal_service/api.rb +28 -0
- data/example/animal-service/lib/animal_service/db.rb +5 -0
- data/example/animal-service/spec/service_consumers/pact_helper.rb +10 -16
- data/example/animal-service/spec/service_consumers/provider_states_for_zoo_app.rb +13 -3
- data/example/zoo-app/Gemfile +0 -2
- data/example/zoo-app/Gemfile.lock +7 -8
- data/example/zoo-app/lib/zoo_app/animal_service_client.rb +8 -4
- data/example/zoo-app/spec/pacts/zoo_app-animal_service.json +18 -64
- data/example/zoo-app/spec/service_providers/animal_service_client_spec.rb +76 -0
- data/example/zoo-app/spec/service_providers/pact_helper.rb +1 -1
- data/example/zoo-app/spec/spec_helper.rb +0 -2
- data/lib/pact/app.rb +4 -2
- data/lib/pact/consumer/configuration.rb +2 -2
- data/lib/pact/consumer/consumer_contract_builder.rb +2 -1
- data/lib/pact/consumer/interactions_filter.rb +7 -0
- data/lib/pact/consumer/mock_service/app.rb +7 -2
- data/lib/pact/consumer/mock_service/interaction_mismatch.rb +6 -1
- data/lib/pact/consumer/mock_service/interaction_post.rb +1 -1
- data/lib/pact/consumer/mock_service/rack_request_helper.rb +1 -1
- data/lib/pact/consumer/rspec.rb +9 -15
- data/lib/pact/consumer/rspec/full_example_description.rb +28 -0
- data/lib/pact/consumer/spec_hooks.rb +31 -0
- data/lib/pact/consumer_contract/consumer_contract.rb +2 -31
- data/lib/pact/consumer_contract/file_name.rb +13 -0
- data/lib/pact/consumer_contract/pact_file.rb +24 -0
- data/lib/pact/provider/matchers.rb +3 -1
- data/lib/pact/provider/provider_state.rb +43 -20
- data/lib/pact/version.rb +1 -1
- data/pact.gemspec +0 -1
- data/spec/features/consumption_spec.rb +5 -0
- data/spec/lib/pact/consumer/consumer_contract_builder_spec.rb +162 -147
- data/spec/lib/pact/consumer/mock_service/app_spec.rb +52 -0
- data/spec/lib/pact/consumer/mock_service/interaction_mismatch_spec.rb +3 -3
- metadata +19 -25
- data/example/zoo-app/spec/service_providers/animal_service_spec.rb +0 -92
@@ -4,6 +4,9 @@ require 'pact/consumer/rspec'
|
|
4
4
|
|
5
5
|
describe "A service consumer side of a pact", :pact => true do
|
6
6
|
|
7
|
+
describe "blah" do
|
8
|
+
describe "thing" do
|
9
|
+
|
7
10
|
it "goes a little something like this" do
|
8
11
|
Pact.clear_configuration
|
9
12
|
|
@@ -101,4 +104,6 @@ describe "A service consumer side of a pact", :pact => true do
|
|
101
104
|
end
|
102
105
|
|
103
106
|
end
|
107
|
+
end
|
108
|
+
end
|
104
109
|
|
@@ -3,150 +3,165 @@ require 'fileutils'
|
|
3
3
|
require 'pathname'
|
4
4
|
|
5
5
|
module Pact
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
6
|
+
module Consumer
|
7
|
+
describe ConsumerContractBuilder do
|
8
|
+
|
9
|
+
let(:consumer_name) { 'a consumer' }
|
10
|
+
let(:provider_name) { 'a provider' }
|
11
|
+
|
12
|
+
describe "initialize" do
|
13
|
+
SUPPORT_PACT_FILE = './spec/support/a_consumer-a_provider.json'
|
14
|
+
before do
|
15
|
+
Pact.clear_configuration
|
16
|
+
Pact.configuration.stub(:pact_dir).and_return(File.expand_path(tmp_pact_dir))
|
17
|
+
FileUtils.rm_rf tmp_pact_dir
|
18
|
+
FileUtils.mkdir_p tmp_pact_dir
|
19
|
+
FileUtils.cp SUPPORT_PACT_FILE, "#{tmp_pact_dir}/a_consumer-a_provider.json"
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:expected_interactions) { ConsumerContract.from_json(File.read(SUPPORT_PACT_FILE)).interactions }
|
23
|
+
|
24
|
+
let(:tmp_pact_dir) {"./tmp/pacts"}
|
25
|
+
|
26
|
+
let(:consumer_contract_builder) {
|
27
|
+
Pact::Consumer::ConsumerContractBuilder.new(
|
28
|
+
:pactfile_write_mode => pactfile_write_mode,
|
29
|
+
:consumer_name => consumer_name,
|
30
|
+
:provider_name => provider_name,
|
31
|
+
:port => 1234)}
|
32
|
+
|
33
|
+
context "when overwriting pact" do
|
34
|
+
let(:pactfile_write_mode) {:overwrite}
|
35
|
+
it "it overwrites the existing pact file" do
|
36
|
+
expect(consumer_contract_builder.consumer_contract.interactions).to eq []
|
37
|
+
end
|
38
|
+
|
39
|
+
it "uses an DistinctInteractionsFilter to handle new interactions" do
|
40
|
+
Pact::Consumer::DistinctInteractionsFilter.should_receive(:new).with([])
|
41
|
+
consumer_contract_builder
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when updating pact" do
|
46
|
+
before do
|
47
|
+
|
48
|
+
end
|
49
|
+
let(:pactfile_write_mode) {:update}
|
50
|
+
it "loads the interactions from the existing pact file" do
|
51
|
+
ConsumerContractBuilder.any_instance.stub(:info_and_puts)
|
52
|
+
expect(consumer_contract_builder.consumer_contract.interactions).to eq expected_interactions
|
53
|
+
end
|
54
|
+
|
55
|
+
it "uses an UpdatableInteractionsFilter to handle new interactions" do
|
56
|
+
ConsumerContractBuilder.any_instance.stub(:info_and_puts)
|
57
|
+
Pact::Consumer::UpdatableInteractionsFilter.should_receive(:new).with(expected_interactions)
|
58
|
+
consumer_contract_builder
|
59
|
+
end
|
60
|
+
|
61
|
+
let(:line0) { /\*/ }
|
62
|
+
let(:line1) { /Updating existing file/ }
|
63
|
+
let(:line2) { /Only interactions defined in this test run will be updated/ }
|
64
|
+
let(:line3) { /As interactions are identified by description and provider state/ }
|
65
|
+
it "logs a description message" do
|
66
|
+
$stdout.should_receive(:puts).with(line0).twice
|
67
|
+
$stdout.should_receive(:puts).with(line1)
|
68
|
+
$stdout.should_receive(:puts).with(line2)
|
69
|
+
$stdout.should_receive(:puts).with(line3)
|
70
|
+
Pact.configuration.logger.should_receive(:info).with(line0).twice
|
71
|
+
Pact.configuration.logger.should_receive(:info).with(line1)
|
72
|
+
Pact.configuration.logger.should_receive(:info).with(line2)
|
73
|
+
Pact.configuration.logger.should_receive(:info).with(line3)
|
74
|
+
consumer_contract_builder
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when an error occurs deserializing the existing pactfile" do
|
79
|
+
let(:pactfile_write_mode) {:update}
|
80
|
+
let(:error) { RuntimeError.new('some error')}
|
81
|
+
let(:line1) { /Could not load existing consumer contract from .* due to some error/ }
|
82
|
+
let(:line2) {'Creating a new file.'}
|
83
|
+
before do
|
84
|
+
ConsumerContract.stub(:from_json).and_raise(error)
|
85
|
+
$stderr.should_receive(:puts).with(line1)
|
86
|
+
$stderr.should_receive(:puts).with(line2)
|
87
|
+
Pact.configuration.logger.should_receive(:warn).with(line1)
|
88
|
+
Pact.configuration.logger.should_receive(:warn).with(line2)
|
89
|
+
end
|
90
|
+
it "logs the error" do
|
91
|
+
consumer_contract_builder
|
92
|
+
end
|
93
|
+
|
94
|
+
it "continues with a new file" do
|
95
|
+
expect(consumer_contract_builder.consumer_contract.interactions).to eq []
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "handle_interaction_fully_defined" do
|
101
|
+
|
102
|
+
subject {
|
103
|
+
Pact::Consumer::ConsumerContractBuilder.new({:consumer_name => 'blah', :provider_name => 'blah', :port => 2222})
|
104
|
+
}
|
105
|
+
|
106
|
+
let(:interaction_hash) {
|
107
|
+
{
|
108
|
+
description: 'Test request',
|
109
|
+
request: {
|
110
|
+
method: 'post',
|
111
|
+
path: '/foo',
|
112
|
+
body: Term.new(generate: 'waffle', matcher: /ffl/),
|
113
|
+
headers: { 'Content-Type' => 'application/json' },
|
114
|
+
query: "",
|
115
|
+
},
|
116
|
+
response: {
|
117
|
+
baz: 'qux',
|
118
|
+
wiffle: 'wiffle'
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
let(:interaction_json) { {} }
|
124
|
+
|
125
|
+
let(:interaction) { Pact::Interaction.from_hash(JSON.load(interaction_hash.to_json)) }
|
126
|
+
|
127
|
+
before do
|
128
|
+
stub_request(:post, 'localhost:2222/interactions')
|
129
|
+
end
|
130
|
+
|
131
|
+
it "posts the interaction with generated response to the mock service" do
|
132
|
+
subject.handle_interaction_fully_defined interaction
|
133
|
+
WebMock.should have_requested(:post, 'localhost:2222/interactions').with(body: interaction_json)
|
134
|
+
end
|
135
|
+
|
136
|
+
it "adds the interaction to the consumer contract" do
|
137
|
+
subject.handle_interaction_fully_defined interaction
|
138
|
+
expect(subject.consumer_contract.interactions).to eq [interaction]
|
139
|
+
end
|
140
|
+
|
141
|
+
it "updates the provider's pactfile" do
|
142
|
+
subject.consumer_contract.should_receive(:update_pactfile)
|
143
|
+
subject.handle_interaction_fully_defined interaction
|
144
|
+
end
|
145
|
+
|
146
|
+
it "resets the interaction_builder to nil" do
|
147
|
+
subject.should_receive(:interaction_builder=).with(nil)
|
148
|
+
subject.handle_interaction_fully_defined interaction
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "#mock_service_base_url" do
|
153
|
+
|
154
|
+
subject {
|
155
|
+
ConsumerContractBuilder.new(
|
156
|
+
:pactfile_write_mode => :overwrite,
|
157
|
+
:consumer_name => consumer_name,
|
158
|
+
:provider_name => provider_name,
|
159
|
+
:port => 1234) }
|
160
|
+
|
161
|
+
it "returns the mock service base URL" do
|
162
|
+
expect(subject.mock_service_base_url).to eq("http://localhost:1234")
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack/test'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module Pact
|
6
|
+
module Consumer
|
7
|
+
|
8
|
+
describe MockService do
|
9
|
+
|
10
|
+
include Rack::Test::Methods
|
11
|
+
|
12
|
+
def app
|
13
|
+
MockService.new(log_file: temp_file)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:temp_file) { Tempfile.new('log') }
|
17
|
+
|
18
|
+
after do
|
19
|
+
temp_file.close
|
20
|
+
temp_file.unlink
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when a StandardError is encountered" do
|
24
|
+
let(:response) { JSON.parse(last_response.body)}
|
25
|
+
let(:interaction_replay) { double(InteractionReplay, :match? => true)}
|
26
|
+
|
27
|
+
before do
|
28
|
+
InteractionReplay.stub(:new).and_return(interaction_replay)
|
29
|
+
interaction_replay.stub(:respond).and_raise("an error")
|
30
|
+
end
|
31
|
+
|
32
|
+
subject { get "/" }
|
33
|
+
|
34
|
+
it "returns a json error" do
|
35
|
+
subject
|
36
|
+
expect(last_response.content_type).to eq 'application/json'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "includes the error message" do
|
40
|
+
subject
|
41
|
+
expect(response['message']).to eq "an error"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "includes the backtrace" do
|
45
|
+
subject
|
46
|
+
expect(response['backtrace']).to be_instance_of Array
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -27,20 +27,20 @@ module Pact
|
|
27
27
|
let(:diff_1) { {body: nil} }
|
28
28
|
|
29
29
|
it "returns a message indicating that the body does not match" do
|
30
|
-
expect(subject.short_summary).to include "(body did not match)"
|
30
|
+
expect(subject.short_summary).to include "(request body did not match)"
|
31
31
|
end
|
32
32
|
end
|
33
33
|
context "when the headers do not match" do
|
34
34
|
let(:diff_1) { {headers: nil} }
|
35
35
|
it "returns a message indicating that the body does not match" do
|
36
|
-
expect(subject.short_summary).to include "(headers did not match)"
|
36
|
+
expect(subject.short_summary).to include "(request headers did not match)"
|
37
37
|
end
|
38
38
|
end
|
39
39
|
context "when the headers and body do not match" do
|
40
40
|
let(:diff_1) { {body: nil, headers: nil} }
|
41
41
|
let(:diff_2) { {body: nil, headers: nil} }
|
42
42
|
it "returns a message indicating that the headers and body do not match" do
|
43
|
-
expect(subject.short_summary).to include "(body and headers did not match)"
|
43
|
+
expect(subject.short_summary).to include "(request body and headers did not match)"
|
44
44
|
end
|
45
45
|
end
|
46
46
|
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.0.
|
4
|
+
version: 1.0.31
|
5
5
|
prerelease:
|
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:
|
16
|
+
date: 2014-03-11 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: randexp
|
@@ -31,22 +31,6 @@ dependencies:
|
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.1.7
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: thin
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
|
-
requirements:
|
39
|
-
- - ! '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
type: :runtime
|
43
|
-
prerelease: false
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
45
|
-
none: false
|
46
|
-
requirements:
|
47
|
-
- - ! '>='
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0'
|
50
34
|
- !ruby/object:Gem::Dependency
|
51
35
|
name: rspec
|
52
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -297,9 +281,19 @@ files:
|
|
297
281
|
- Rakefile
|
298
282
|
- bin/pact
|
299
283
|
- config.ru
|
284
|
+
- documentation/Testing with pact.png
|
285
|
+
- documentation/faq.md
|
286
|
+
- documentation/raq.md
|
287
|
+
- documentation/terminology.md
|
300
288
|
- example/animal-service/Gemfile
|
301
289
|
- example/animal-service/Gemfile.lock
|
302
290
|
- example/animal-service/Rakefile
|
291
|
+
- example/animal-service/config.ru
|
292
|
+
- example/animal-service/db/animal_db.sqlite3
|
293
|
+
- example/animal-service/db/animals_db.sqlite3
|
294
|
+
- example/animal-service/lib/animal_service/animal_repository.rb
|
295
|
+
- example/animal-service/lib/animal_service/api.rb
|
296
|
+
- example/animal-service/lib/animal_service/db.rb
|
303
297
|
- example/animal-service/spec/service_consumers/pact_helper.rb
|
304
298
|
- example/animal-service/spec/service_consumers/provider_states_for_zoo_app.rb
|
305
299
|
- example/zoo-app/Gemfile
|
@@ -307,7 +301,7 @@ files:
|
|
307
301
|
- example/zoo-app/lib/zoo_app/animal_service_client.rb
|
308
302
|
- example/zoo-app/lib/zoo_app/models/alligator.rb
|
309
303
|
- example/zoo-app/spec/pacts/zoo_app-animal_service.json
|
310
|
-
- example/zoo-app/spec/service_providers/
|
304
|
+
- example/zoo-app/spec/service_providers/animal_service_client_spec.rb
|
311
305
|
- example/zoo-app/spec/service_providers/pact_helper.rb
|
312
306
|
- example/zoo-app/spec/spec_helper.rb
|
313
307
|
- lib/pact.rb
|
@@ -336,11 +330,15 @@ files:
|
|
336
330
|
- lib/pact/consumer/mock_service_interaction_expectation.rb
|
337
331
|
- lib/pact/consumer/request.rb
|
338
332
|
- lib/pact/consumer/rspec.rb
|
333
|
+
- lib/pact/consumer/rspec/full_example_description.rb
|
339
334
|
- lib/pact/consumer/server.rb
|
335
|
+
- lib/pact/consumer/spec_hooks.rb
|
340
336
|
- lib/pact/consumer_contract.rb
|
341
337
|
- lib/pact/consumer_contract/active_support_support.rb
|
342
338
|
- lib/pact/consumer_contract/consumer_contract.rb
|
339
|
+
- lib/pact/consumer_contract/file_name.rb
|
343
340
|
- lib/pact/consumer_contract/interaction.rb
|
341
|
+
- lib/pact/consumer_contract/pact_file.rb
|
344
342
|
- lib/pact/consumer_contract/request.rb
|
345
343
|
- lib/pact/consumer_contract/service_consumer.rb
|
346
344
|
- lib/pact/consumer_contract/service_provider.rb
|
@@ -394,6 +392,7 @@ files:
|
|
394
392
|
- spec/lib/pact/consumer/consumer_contract_builder_spec.rb
|
395
393
|
- spec/lib/pact/consumer/interaction_builder_spec.rb
|
396
394
|
- spec/lib/pact/consumer/interactions_spec.rb
|
395
|
+
- spec/lib/pact/consumer/mock_service/app_spec.rb
|
397
396
|
- spec/lib/pact/consumer/mock_service/interaction_list_spec.rb
|
398
397
|
- spec/lib/pact/consumer/mock_service/interaction_mismatch_spec.rb
|
399
398
|
- spec/lib/pact/consumer/mock_service/interaction_replay_spec.rb
|
@@ -450,18 +449,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
450
449
|
- - ! '>='
|
451
450
|
- !ruby/object:Gem::Version
|
452
451
|
version: '0'
|
453
|
-
segments:
|
454
|
-
- 0
|
455
|
-
hash: 2811888500832128334
|
456
452
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
457
453
|
none: false
|
458
454
|
requirements:
|
459
455
|
- - ! '>='
|
460
456
|
- !ruby/object:Gem::Version
|
461
457
|
version: '0'
|
462
|
-
segments:
|
463
|
-
- 0
|
464
|
-
hash: 2811888500832128334
|
465
458
|
requirements: []
|
466
459
|
rubyforge_project:
|
467
460
|
rubygems_version: 1.8.23
|
@@ -483,6 +476,7 @@ test_files:
|
|
483
476
|
- spec/lib/pact/consumer/consumer_contract_builder_spec.rb
|
484
477
|
- spec/lib/pact/consumer/interaction_builder_spec.rb
|
485
478
|
- spec/lib/pact/consumer/interactions_spec.rb
|
479
|
+
- spec/lib/pact/consumer/mock_service/app_spec.rb
|
486
480
|
- spec/lib/pact/consumer/mock_service/interaction_list_spec.rb
|
487
481
|
- spec/lib/pact/consumer/mock_service/interaction_mismatch_spec.rb
|
488
482
|
- spec/lib/pact/consumer/mock_service/interaction_replay_spec.rb
|