pact 1.3.0 → 1.3.1

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.
Files changed (45) hide show
  1. data/.travis.yml +1 -1
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile.lock +5 -5
  4. data/README.md +25 -29
  5. data/documentation/README.md +9 -7
  6. data/lib/pact/configuration.rb +83 -12
  7. data/lib/pact/consumer/mock_service/interaction_mismatch.rb +5 -1
  8. data/lib/pact/consumer/spec_hooks.rb +7 -4
  9. data/lib/pact/consumer/world.rb +12 -0
  10. data/lib/pact/consumer_contract/headers.rb +51 -0
  11. data/lib/pact/consumer_contract/request.rb +6 -1
  12. data/lib/pact/provider/configuration/service_provider_dsl.rb +6 -1
  13. data/lib/pact/provider/matchers/messages.rb +2 -2
  14. data/lib/pact/provider/rspec.rb +7 -1
  15. data/lib/pact/provider/rspec/backtrace_formatter.rb +30 -6
  16. data/lib/pact/provider/rspec/matchers.rb +9 -6
  17. data/lib/pact/shared/json_differ.rb +15 -0
  18. data/lib/pact/shared/request.rb +11 -2
  19. data/lib/pact/shared/text_differ.rb +14 -0
  20. data/lib/pact/version.rb +1 -1
  21. data/spec/lib/pact/configuration_spec.rb +127 -5
  22. data/spec/lib/pact/consumer/mock_service/interaction_mismatch_spec.rb +8 -5
  23. data/spec/lib/pact/consumer_contract/headers_spec.rb +107 -0
  24. data/spec/lib/pact/consumer_contract/request_spec.rb +9 -0
  25. data/spec/lib/pact/matchers/matchers_spec.rb +35 -0
  26. data/spec/lib/pact/provider/configuration/service_provider_dsl_spec.rb +16 -0
  27. data/spec/lib/pact/provider/matchers/messages_spec.rb +5 -4
  28. data/spec/lib/pact/provider/rspec_spec.rb +15 -11
  29. data/spec/lib/pact/shared/json_differ_spec.rb +36 -0
  30. data/spec/lib/pact/shared/request_spec.rb +25 -1
  31. data/spec/lib/pact/shared/text_differ_spec.rb +54 -0
  32. data/spec/support/pact_helper.rb +2 -0
  33. data/spec/support/test_app_with_right_content_type_differ.json +23 -0
  34. data/tasks/pact-test.rake +6 -0
  35. metadata +72 -30
  36. checksums.yaml +0 -7
  37. data/documentation/Testing with pact.png +0 -0
  38. data/documentation/best-practices.md +0 -33
  39. data/documentation/development-workflow.md +0 -22
  40. data/documentation/faq.md +0 -81
  41. data/documentation/provider-states.md +0 -178
  42. data/documentation/raq.md +0 -39
  43. data/documentation/terminology.md +0 -25
  44. data/documentation/troubleshooting.md +0 -4
  45. data/documentation/verifying-pacts.md +0 -106
@@ -76,6 +76,15 @@ module Pact
76
76
  end
77
77
  end
78
78
 
79
+ context "when the methods are the same but different case" do
80
+ let(:expected_method) { 'get' }
81
+ let(:actual_method) { 'GET' }
82
+
83
+ it "matches" do
84
+ expect(subject.matches? actual_request).to be true
85
+ end
86
+ end
87
+
79
88
  context "when the paths are different" do
80
89
  let(:expected_path) { '/foo' }
81
90
  let(:actual_path) { '/bar' }
@@ -1,11 +1,46 @@
1
1
  require 'spec_helper'
2
2
  require 'pact/matchers'
3
+ require 'pact/consumer_contract/headers'
3
4
 
4
5
  module Pact::Matchers
5
6
 
6
7
  describe Pact::Matchers do
7
8
  include Pact::Matchers
8
9
 
10
+ # TODO this is an integration test
11
+ describe 'matching headers' do
12
+ let(:expected) { Pact::Headers.new('Content-Type' => 'application/hippo')}
13
+
14
+ context "when the headers match in a case insensitive way" do
15
+
16
+ context "when the values match" do
17
+ let(:actual) { Pact::Headers.new('CONTENT-TYPE' => 'application/hippo')}
18
+ it "returns an empty diff" do
19
+ expect(diff(expected, actual)).to be_empty
20
+ end
21
+ end
22
+
23
+ context "when the header values do not match" do
24
+ let(:actual) { Pact::Headers.new('CONTENT-TYPE' => 'application/alligator')}
25
+ let(:difference) { {"Content-Type" => Difference.new('application/hippo', 'application/alligator')} }
26
+ it "returns the diff" do
27
+ expect(diff(expected, actual)).to eq difference
28
+ end
29
+ end
30
+ end
31
+
32
+ context "when the headers do not match" do
33
+
34
+ let(:actual) { Pact::Headers.new('Content-Length' => '1')}
35
+ let(:difference) { {"Content-Type" => Difference.new('application/hippo', Pact::KeyNotFound.new)} }
36
+ it "returns a diff" do
37
+ expect(diff(expected, actual)).to eq difference
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
9
44
  describe 'matching with something like' do
10
45
 
11
46
  context 'when the actual is something like the expected' do
@@ -84,6 +84,22 @@ module Pact
84
84
  end
85
85
 
86
86
  end
87
+
88
+ describe "CONFIG_RU_APP" do
89
+ context "when a config.ru file does not exist" do
90
+
91
+ let(:path_that_does_not_exist) { './tmp/this/path/does/not/exist/probably' }
92
+
93
+ before do
94
+ allow(Pact.configuration).to receive(:config_ru_path).and_return(path_that_does_not_exist)
95
+ end
96
+
97
+ it "raises an error with some helpful text" do
98
+ expect{ ServiceProviderDSL::CONFIG_RU_APP.call }.to raise_error /Could not find config\.ru file.*#{Regexp.escape(path_that_does_not_exist)}/
99
+ end
100
+
101
+ end
102
+ end
87
103
  end
88
104
 
89
105
  end
@@ -9,6 +9,7 @@ module Pact
9
9
 
10
10
  describe "#match_term_failure_message" do
11
11
 
12
+ let(:diff_formatter) { Pact::Matchers::UnixDiffFormatter }
12
13
  let(:message) { "line1\nline2"}
13
14
  let(:output_message) { "Actual: actual\n\n#{message}"}
14
15
  let(:output_message_with_resets) { "Actual: actual\n\n#{r}line1\n#{r}line2"}
@@ -20,13 +21,13 @@ module Pact
20
21
  let(:message_line_count) { message.split("\n").size }
21
22
 
22
23
  before do
23
- allow(Pact.configuration.diff_formatter).to receive(:call).and_return(message)
24
+ allow(diff_formatter).to receive(:call).and_return(message)
24
25
  end
25
26
 
26
- subject { match_term_failure_message diff, actual, color_enabled }
27
+ subject { match_term_failure_message diff, actual, diff_formatter, color_enabled }
27
28
 
28
- it "creates a message using the configured diff_formatter" do
29
- expect(Pact.configuration.diff_formatter).to receive(:call).with(diff)
29
+ it "creates a message using the diff_formatter" do
30
+ expect(diff_formatter).to receive(:call).with(diff)
30
31
  subject
31
32
  end
32
33
 
@@ -1,51 +1,55 @@
1
- require 'pact/provider/rspec'
2
1
  require 'pact/provider/rspec/matchers'
2
+ require 'pact/shared/json_differ'
3
+ require 'pact/matchers/unix_diff_formatter'
4
+
3
5
 
4
6
  describe "the match_term matcher" do
5
7
 
6
8
  include Pact::RSpec::Matchers
7
9
 
10
+ let(:diff_formatter) { Pact::Matchers::UnixDiffFormatter }
11
+
8
12
  it 'does not match a hash to an array' do
9
- expect({}).to_not match_term([])
13
+ expect({}).to_not match_term([], with: Pact::JsonDiffer, diff_formatter: diff_formatter)
10
14
  end
11
15
 
12
16
  it 'does not match an array to a hash' do
13
- expect([]).to_not match_term({})
17
+ expect([]).to_not match_term({}, with: Pact::JsonDiffer, diff_formatter: diff_formatter)
14
18
  end
15
19
 
16
20
  it 'matches regular expressions' do
17
- expect('blah').to match_term(/[a-z]*/)
21
+ expect('blah').to match_term(/[a-z]*/, with: Pact::JsonDiffer, diff_formatter: diff_formatter)
18
22
  end
19
23
 
20
24
  it 'matches pact terms' do
21
- expect('wootle').to match_term Pact::Term.new(generate:'wootle', matcher:/woot../)
25
+ expect('wootle').to match_term Pact::Term.new(generate:'wootle', matcher:/woot../), with: Pact::JsonDiffer, diff_formatter: diff_formatter
22
26
  end
23
27
 
24
28
  it 'matches all elements of arrays' do
25
- expect(['one', 'two', ['three']]).to match_term [/one/, 'two', [Pact::Term.new(generate:'three', matcher:/thr../)]]
29
+ expect(['one', 'two', ['three']]).to match_term [/one/, 'two', [Pact::Term.new(generate:'three', matcher:/thr../)]], with: Pact::JsonDiffer, diff_formatter: diff_formatter
26
30
  end
27
31
 
28
32
  it 'matches all values of hashes' do
29
- expect({1 => 'one', 2 => 2, 3 => 'three'}).to match_term({1 => /one/, 2 => 2, 3 => Pact::Term.new(generate:'three', matcher:/thr../)})
33
+ expect({1 => 'one', 2 => 2, 3 => 'three'}).to match_term({1 => /one/, 2 => 2, 3 => Pact::Term.new(generate:'three', matcher:/thr../)}, with: Pact::JsonDiffer, diff_formatter: diff_formatter)
30
34
  end
31
35
 
32
36
  it 'matches all other objects using ==' do
33
- expect('wootle').to match_term 'wootle'
37
+ expect('wootle').to match_term 'wootle', with: Pact::JsonDiffer, diff_formatter: diff_formatter
34
38
  end
35
39
 
36
40
  # Note: because a consumer specifies only the keys it cares about, the pact ignores keys that are returned
37
41
  # by the provider, but not are not specified in the pact. This means that any hash will match an
38
42
  # expected empty hash, because there is currently no way for a consumer to expect an absence of keys.
39
43
  it 'is confused by an empty hash' do
40
- expect({:hello => 'everyone'}).to match_term({})
44
+ expect({:hello => 'everyone'}).to match_term({}, with: Pact::JsonDiffer, diff_formatter: diff_formatter)
41
45
  end
42
46
 
43
47
  it 'should not be confused by an empty array' do
44
- expect(['blah']).to_not match_term([])
48
+ expect(['blah']).to_not match_term([], with: Pact::JsonDiffer, diff_formatter: diff_formatter)
45
49
  end
46
50
 
47
51
  it "should allow matches on an array where each item in the array only contains a subset of the actual" do
48
- expect([{name: 'Fred', age: 12}, {name: 'John', age: 13}]).to match_term([{name: 'Fred'}, {name: 'John'}])
52
+ expect([{name: 'Fred', age: 12}, {name: 'John', age: 13}]).to match_term([{name: 'Fred'}, {name: 'John'}], with: Pact::JsonDiffer, diff_formatter: diff_formatter)
49
53
  end
50
54
 
51
55
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'pact/shared/json_differ'
3
+
4
+ module Pact
5
+ describe JsonDiffer do
6
+
7
+ describe ".call" do
8
+
9
+ let(:expected) { {'a' => 'b'} }
10
+
11
+ subject { JsonDiffer.call(expected, actual) }
12
+
13
+ context "when the actual is valid JSON" do
14
+
15
+ let(:actual) { {'a' => 'c'} }
16
+ let(:difference) { {'a' => Pact::Matchers::Difference.new('b', 'c')} }
17
+
18
+ context "when the actual does not equal the expected" do
19
+ it "parses the JSON and returns a diff" do
20
+ expect(subject).to eq(difference)
21
+ end
22
+ end
23
+
24
+ context "when the actual equals the expected" do
25
+ let(:actual) { expected }
26
+ it "parses the JSON and returns an empty diff" do
27
+ expect(subject.any?).to be false
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'pact/shared/request'
3
+ require 'pact/shared/key_not_found'
3
4
 
4
5
  module Pact
5
6
 
@@ -10,7 +11,7 @@ module Pact
10
11
  class TestRequest < Base
11
12
 
12
13
  def self.key_not_found
13
- nil
14
+ Pact::KeyNotFound.new
14
15
  end
15
16
 
16
17
  end
@@ -82,6 +83,29 @@ module Pact
82
83
  end
83
84
  end
84
85
 
86
+ describe "#content_type" do
87
+
88
+ subject { TestRequest.new("get", "/something", headers, {} , "") }
89
+ context "when there are no expected headers" do
90
+ let(:headers) { Pact::KeyNotFound.new }
91
+ it "returns nil" do
92
+ expect(subject.send(:content_type)).to be nil
93
+ end
94
+ end
95
+ context "when there is no Content-Type header" do
96
+ let(:headers) { {} }
97
+ it "returns the content-type" do
98
+ expect(subject.send(:content_type)).to be nil
99
+ end
100
+ end
101
+ context "when there is a content-type header (" do
102
+ let(:headers) { {'content-type' => 'blah'} }
103
+ it "returns the content-type" do
104
+ expect(subject.send(:content_type)).to eq 'blah'
105
+ end
106
+ end
107
+ end
108
+
85
109
  end
86
110
  end
87
111
  end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+ require 'pact/shared/text_differ'
3
+
4
+ module Pact
5
+ describe TextDiffer do
6
+
7
+ describe ".call" do
8
+
9
+ subject { TextDiffer.call expected, actual }
10
+
11
+ let(:expected) { "This is the string you are looking for" }
12
+
13
+ context "when the expected and actual are both strings" do
14
+
15
+ context "when they equal each other" do
16
+ let(:actual) { "This is the string you are looking for" }
17
+
18
+ it "returns an empty diff" do
19
+ expect(subject.any?).to be false
20
+ end
21
+ end
22
+
23
+ context "when they don't equal each other" do
24
+ let(:actual) { "This is not the string you are looking for" }
25
+
26
+ it "returns the diff" do
27
+ expect(subject).to eq Pact::Matchers::Difference.new(expected, actual)
28
+ end
29
+ end
30
+ end
31
+
32
+ context "when the actual is not a String" do
33
+ let(:actual) { {some: 'hash'} }
34
+ let(:difference) { Pact::Matchers::Difference.new(expected, actual)}
35
+ it "returns the diff" do
36
+ expect(subject)
37
+ end
38
+ end
39
+
40
+ context "when the expected and actual are both objects" do
41
+ let(:actual) { {some: 'hash', blah: 'blah'} }
42
+ let(:expected) { {some: 'hash'} }
43
+ let(:difference) { Pact::Matchers::Difference.new(expected, actual)}
44
+
45
+ it "returns the diff using the JSON matching logic, allowing extra keys. But should it really if the expected Content-Type isn't actually JSON?" do
46
+ expect(subject)
47
+ end
48
+
49
+ it "potentially should treat both expected and actual as Strings"
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -11,6 +11,8 @@ module Pact
11
11
  [200, {'Content-Type' => 'application/json'}, [{message: WEATHER[:current_state], :array => [{"foo"=> "blah"}]}.to_json]]
12
12
  elsif env['PATH_INFO'] == '/sometext'
13
13
  [200, {'Content-Type' => 'text/plain'}, ['some text']]
14
+ elsif env['PATH_INFO'] == '/content_type_is_important'
15
+ [200, {'Content-Type' => 'application/json'}, [{message: "A message", note: "This will cause verify to fail if it using the wrong content type differ."}.to_json]]
14
16
  else
15
17
  raise "unexpected path #{env['PATH_INFO']}!!!"
16
18
  end
@@ -0,0 +1,23 @@
1
+ {
2
+ "consumer": {
3
+ "name": "some-test-consumer"
4
+ },
5
+ "provider": {
6
+ "name": "the test app in the pact_helper file"
7
+ },
8
+ "interactions": [
9
+ {
10
+ "description": "a test request expecting an application/json response",
11
+ "request": {
12
+ "method": "get",
13
+ "path": "/content_type_is_important",
14
+ "query": ""
15
+ },
16
+ "response": {
17
+ "status": 200,
18
+ "headers" : {"Content-type": "application/json"},
19
+ "body": {"message" : "A message"}
20
+ }
21
+ }
22
+ ]
23
+ }
data/tasks/pact-test.rake CHANGED
@@ -30,6 +30,10 @@ Pact::VerificationTask.new('test_app:pass') do | pact |
30
30
  pact.uri './spec/support/test_app_pass.json'
31
31
  end
32
32
 
33
+ Pact::VerificationTask.new('test_app:content_type') do | pact |
34
+ pact.uri './spec/support/test_app_with_right_content_type_differ.json'
35
+ end
36
+
33
37
  Pact::VerificationTask.new('test_app:fail') do | pact |
34
38
  pact.uri './spec/support/test_app_fail.json', pact_helper: './spec/support/pact_helper.rb'
35
39
  end
@@ -45,6 +49,8 @@ namespace :pact do
45
49
  Rake::Task['pact:verify'].execute
46
50
  Rake::Task['pact:verify:test_app:pass'].execute
47
51
  Rake::Task['pact:test:fail'].execute
52
+ Rake::Task['pact:test:pactfile'].execute
53
+ Rake::Task['pact:verify:test_app:content_type'].execute
48
54
  end
49
55
 
50
56
  desc "All the verification tests with active support loaded"
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - James Fraser
@@ -12,11 +13,12 @@ authors:
12
13
  autorequire:
13
14
  bindir: bin
14
15
  cert_chain: []
15
- date: 2014-06-18 00:00:00.000000000 Z
16
+ date: 2014-08-11 00:00:00.000000000 Z
16
17
  dependencies:
17
18
  - !ruby/object:Gem::Dependency
18
19
  name: randexp
19
20
  requirement: !ruby/object:Gem::Requirement
21
+ none: false
20
22
  requirements:
21
23
  - - ~>
22
24
  - !ruby/object:Gem::Version
@@ -24,6 +26,7 @@ dependencies:
24
26
  type: :runtime
25
27
  prerelease: false
26
28
  version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
27
30
  requirements:
28
31
  - - ~>
29
32
  - !ruby/object:Gem::Version
@@ -31,20 +34,23 @@ dependencies:
31
34
  - !ruby/object:Gem::Dependency
32
35
  name: rspec
33
36
  requirement: !ruby/object:Gem::Requirement
37
+ none: false
34
38
  requirements:
35
- - - '>='
39
+ - - ! '>='
36
40
  - !ruby/object:Gem::Version
37
41
  version: '2.14'
38
42
  type: :runtime
39
43
  prerelease: false
40
44
  version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
41
46
  requirements:
42
- - - '>='
47
+ - - ! '>='
43
48
  - !ruby/object:Gem::Version
44
49
  version: '2.14'
45
50
  - !ruby/object:Gem::Dependency
46
51
  name: find_a_port
47
52
  requirement: !ruby/object:Gem::Requirement
53
+ none: false
48
54
  requirements:
49
55
  - - ~>
50
56
  - !ruby/object:Gem::Version
@@ -52,6 +58,7 @@ dependencies:
52
58
  type: :runtime
53
59
  prerelease: false
54
60
  version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
55
62
  requirements:
56
63
  - - ~>
57
64
  - !ruby/object:Gem::Version
@@ -59,6 +66,7 @@ dependencies:
59
66
  - !ruby/object:Gem::Dependency
60
67
  name: rack-test
61
68
  requirement: !ruby/object:Gem::Requirement
69
+ none: false
62
70
  requirements:
63
71
  - - ~>
64
72
  - !ruby/object:Gem::Version
@@ -66,6 +74,7 @@ dependencies:
66
74
  type: :runtime
67
75
  prerelease: false
68
76
  version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
69
78
  requirements:
70
79
  - - ~>
71
80
  - !ruby/object:Gem::Version
@@ -73,6 +82,7 @@ dependencies:
73
82
  - !ruby/object:Gem::Dependency
74
83
  name: awesome_print
75
84
  requirement: !ruby/object:Gem::Requirement
85
+ none: false
76
86
  requirements:
77
87
  - - ~>
78
88
  - !ruby/object:Gem::Version
@@ -80,6 +90,7 @@ dependencies:
80
90
  type: :runtime
81
91
  prerelease: false
82
92
  version_requirements: !ruby/object:Gem::Requirement
93
+ none: false
83
94
  requirements:
84
95
  - - ~>
85
96
  - !ruby/object:Gem::Version
@@ -87,48 +98,55 @@ dependencies:
87
98
  - !ruby/object:Gem::Dependency
88
99
  name: thor
89
100
  requirement: !ruby/object:Gem::Requirement
101
+ none: false
90
102
  requirements:
91
- - - '>='
103
+ - - ! '>='
92
104
  - !ruby/object:Gem::Version
93
105
  version: '0'
94
106
  type: :runtime
95
107
  prerelease: false
96
108
  version_requirements: !ruby/object:Gem::Requirement
109
+ none: false
97
110
  requirements:
98
- - - '>='
111
+ - - ! '>='
99
112
  - !ruby/object:Gem::Version
100
113
  version: '0'
101
114
  - !ruby/object:Gem::Dependency
102
115
  name: json
103
116
  requirement: !ruby/object:Gem::Requirement
117
+ none: false
104
118
  requirements:
105
- - - '>='
119
+ - - ! '>='
106
120
  - !ruby/object:Gem::Version
107
121
  version: '0'
108
122
  type: :runtime
109
123
  prerelease: false
110
124
  version_requirements: !ruby/object:Gem::Requirement
125
+ none: false
111
126
  requirements:
112
- - - '>='
127
+ - - ! '>='
113
128
  - !ruby/object:Gem::Version
114
129
  version: '0'
115
130
  - !ruby/object:Gem::Dependency
116
131
  name: webrick
117
132
  requirement: !ruby/object:Gem::Requirement
133
+ none: false
118
134
  requirements:
119
- - - '>='
135
+ - - ! '>='
120
136
  - !ruby/object:Gem::Version
121
137
  version: '0'
122
138
  type: :runtime
123
139
  prerelease: false
124
140
  version_requirements: !ruby/object:Gem::Requirement
141
+ none: false
125
142
  requirements:
126
- - - '>='
143
+ - - ! '>='
127
144
  - !ruby/object:Gem::Version
128
145
  version: '0'
129
146
  - !ruby/object:Gem::Dependency
130
147
  name: term-ansicolor
131
148
  requirement: !ruby/object:Gem::Requirement
149
+ none: false
132
150
  requirements:
133
151
  - - ~>
134
152
  - !ruby/object:Gem::Version
@@ -136,6 +154,7 @@ dependencies:
136
154
  type: :runtime
137
155
  prerelease: false
138
156
  version_requirements: !ruby/object:Gem::Requirement
157
+ none: false
139
158
  requirements:
140
159
  - - ~>
141
160
  - !ruby/object:Gem::Version
@@ -143,6 +162,7 @@ dependencies:
143
162
  - !ruby/object:Gem::Dependency
144
163
  name: rake
145
164
  requirement: !ruby/object:Gem::Requirement
165
+ none: false
146
166
  requirements:
147
167
  - - ~>
148
168
  - !ruby/object:Gem::Version
@@ -150,6 +170,7 @@ dependencies:
150
170
  type: :development
151
171
  prerelease: false
152
172
  version_requirements: !ruby/object:Gem::Requirement
173
+ none: false
153
174
  requirements:
154
175
  - - ~>
155
176
  - !ruby/object:Gem::Version
@@ -157,6 +178,7 @@ dependencies:
157
178
  - !ruby/object:Gem::Dependency
158
179
  name: webmock
159
180
  requirement: !ruby/object:Gem::Requirement
181
+ none: false
160
182
  requirements:
161
183
  - - ~>
162
184
  - !ruby/object:Gem::Version
@@ -164,6 +186,7 @@ dependencies:
164
186
  type: :development
165
187
  prerelease: false
166
188
  version_requirements: !ruby/object:Gem::Requirement
189
+ none: false
167
190
  requirements:
168
191
  - - ~>
169
192
  - !ruby/object:Gem::Version
@@ -171,20 +194,23 @@ dependencies:
171
194
  - !ruby/object:Gem::Dependency
172
195
  name: pry
173
196
  requirement: !ruby/object:Gem::Requirement
197
+ none: false
174
198
  requirements:
175
- - - '>='
199
+ - - ! '>='
176
200
  - !ruby/object:Gem::Version
177
201
  version: '0'
178
202
  type: :development
179
203
  prerelease: false
180
204
  version_requirements: !ruby/object:Gem::Requirement
205
+ none: false
181
206
  requirements:
182
- - - '>='
207
+ - - ! '>='
183
208
  - !ruby/object:Gem::Version
184
209
  version: '0'
185
210
  - !ruby/object:Gem::Dependency
186
211
  name: fakefs
187
212
  requirement: !ruby/object:Gem::Requirement
213
+ none: false
188
214
  requirements:
189
215
  - - ~>
190
216
  - !ruby/object:Gem::Version
@@ -192,6 +218,7 @@ dependencies:
192
218
  type: :development
193
219
  prerelease: false
194
220
  version_requirements: !ruby/object:Gem::Requirement
221
+ none: false
195
222
  requirements:
196
223
  - - ~>
197
224
  - !ruby/object:Gem::Version
@@ -199,6 +226,7 @@ dependencies:
199
226
  - !ruby/object:Gem::Dependency
200
227
  name: hashie
201
228
  requirement: !ruby/object:Gem::Requirement
229
+ none: false
202
230
  requirements:
203
231
  - - ~>
204
232
  - !ruby/object:Gem::Version
@@ -206,6 +234,7 @@ dependencies:
206
234
  type: :development
207
235
  prerelease: false
208
236
  version_requirements: !ruby/object:Gem::Requirement
237
+ none: false
209
238
  requirements:
210
239
  - - ~>
211
240
  - !ruby/object:Gem::Version
@@ -213,29 +242,33 @@ dependencies:
213
242
  - !ruby/object:Gem::Dependency
214
243
  name: activesupport
215
244
  requirement: !ruby/object:Gem::Requirement
245
+ none: false
216
246
  requirements:
217
- - - '>='
247
+ - - ! '>='
218
248
  - !ruby/object:Gem::Version
219
249
  version: '0'
220
250
  type: :development
221
251
  prerelease: false
222
252
  version_requirements: !ruby/object:Gem::Requirement
253
+ none: false
223
254
  requirements:
224
- - - '>='
255
+ - - ! '>='
225
256
  - !ruby/object:Gem::Version
226
257
  version: '0'
227
258
  - !ruby/object:Gem::Dependency
228
259
  name: faraday
229
260
  requirement: !ruby/object:Gem::Requirement
261
+ none: false
230
262
  requirements:
231
- - - '>='
263
+ - - ! '>='
232
264
  - !ruby/object:Gem::Version
233
265
  version: '0'
234
266
  type: :development
235
267
  prerelease: false
236
268
  version_requirements: !ruby/object:Gem::Requirement
269
+ none: false
237
270
  requirements:
238
- - - '>='
271
+ - - ! '>='
239
272
  - !ruby/object:Gem::Version
240
273
  version: '0'
241
274
  description: Enables consumer driven contract testing, providing a mock service and
@@ -265,19 +298,10 @@ files:
265
298
  - bin/pact
266
299
  - config.ru
267
300
  - documentation/README.md
268
- - documentation/Testing with pact.png
269
- - documentation/best-practices.md
270
301
  - documentation/configuration.md
271
- - documentation/development-workflow.md
272
302
  - documentation/diff_formatter_embedded.png
273
303
  - documentation/diff_formatter_list.png
274
304
  - documentation/diff_formatter_unix.png
275
- - documentation/faq.md
276
- - documentation/provider-states.md
277
- - documentation/raq.md
278
- - documentation/terminology.md
279
- - documentation/troubleshooting.md
280
- - documentation/verifying-pacts.md
281
305
  - example/animal-service/Gemfile
282
306
  - example/animal-service/Gemfile.lock
283
307
  - example/animal-service/Rakefile
@@ -338,6 +362,7 @@ files:
338
362
  - lib/pact/consumer_contract/consumer_contract.rb
339
363
  - lib/pact/consumer_contract/consumer_contract_writer.rb
340
364
  - lib/pact/consumer_contract/file_name.rb
365
+ - lib/pact/consumer_contract/headers.rb
341
366
  - lib/pact/consumer_contract/interaction.rb
342
367
  - lib/pact/consumer_contract/pact_file.rb
343
368
  - lib/pact/consumer_contract/request.rb
@@ -404,9 +429,11 @@ files:
404
429
  - lib/pact/shared/active_support_support.rb
405
430
  - lib/pact/shared/dsl.rb
406
431
  - lib/pact/shared/jruby_support.rb
432
+ - lib/pact/shared/json_differ.rb
407
433
  - lib/pact/shared/key_not_found.rb
408
434
  - lib/pact/shared/null_expectation.rb
409
435
  - lib/pact/shared/request.rb
436
+ - lib/pact/shared/text_differ.rb
410
437
  - lib/pact/something_like.rb
411
438
  - lib/pact/symbolize_keys.rb
412
439
  - lib/pact/tasks.rb
@@ -444,6 +471,7 @@ files:
444
471
  - spec/lib/pact/consumer_contract/active_support_support_spec.rb
445
472
  - spec/lib/pact/consumer_contract/consumer_contract_spec.rb
446
473
  - spec/lib/pact/consumer_contract/consumer_contract_writer_spec.rb
474
+ - spec/lib/pact/consumer_contract/headers_spec.rb
447
475
  - spec/lib/pact/consumer_contract/interaction_spec.rb
448
476
  - spec/lib/pact/consumer_contract/request_spec.rb
449
477
  - spec/lib/pact/doc/generator_spec.rb
@@ -479,8 +507,10 @@ files:
479
507
  - spec/lib/pact/provider/world_spec.rb
480
508
  - spec/lib/pact/reification_spec.rb
481
509
  - spec/lib/pact/shared/dsl_spec.rb
510
+ - spec/lib/pact/shared/json_differ_spec.rb
482
511
  - spec/lib/pact/shared/key_not_found_spec.rb
483
512
  - spec/lib/pact/shared/request_spec.rb
513
+ - spec/lib/pact/shared/text_differ_spec.rb
484
514
  - spec/lib/pact/something_like_spec.rb
485
515
  - spec/lib/pact/tasks/task_helper_spec.rb
486
516
  - spec/lib/pact/tasks/verification_task_spec.rb
@@ -510,31 +540,39 @@ files:
510
540
  - spec/support/term.json
511
541
  - spec/support/test_app_fail.json
512
542
  - spec/support/test_app_pass.json
543
+ - spec/support/test_app_with_right_content_type_differ.json
513
544
  - tasks/pact-test.rake
514
545
  - tasks/spec.rake
515
546
  homepage: https://github.com/realestate-com-au/pact
516
547
  licenses:
517
548
  - MIT
518
- metadata: {}
519
549
  post_install_message:
520
550
  rdoc_options: []
521
551
  require_paths:
522
552
  - lib
523
553
  required_ruby_version: !ruby/object:Gem::Requirement
554
+ none: false
524
555
  requirements:
525
- - - '>='
556
+ - - ! '>='
526
557
  - !ruby/object:Gem::Version
527
558
  version: '0'
559
+ segments:
560
+ - 0
561
+ hash: 1965962411134089782
528
562
  required_rubygems_version: !ruby/object:Gem::Requirement
563
+ none: false
529
564
  requirements:
530
- - - '>='
565
+ - - ! '>='
531
566
  - !ruby/object:Gem::Version
532
567
  version: '0'
568
+ segments:
569
+ - 0
570
+ hash: 1965962411134089782
533
571
  requirements: []
534
572
  rubyforge_project:
535
- rubygems_version: 2.0.14
573
+ rubygems_version: 1.8.23
536
574
  signing_key:
537
- specification_version: 4
575
+ specification_version: 3
538
576
  summary: Enables consumer driven contract testing, providing a mock service and DSL
539
577
  for the consumer project, and interaction playback and verification for the service
540
578
  provider project.
@@ -565,6 +603,7 @@ test_files:
565
603
  - spec/lib/pact/consumer_contract/active_support_support_spec.rb
566
604
  - spec/lib/pact/consumer_contract/consumer_contract_spec.rb
567
605
  - spec/lib/pact/consumer_contract/consumer_contract_writer_spec.rb
606
+ - spec/lib/pact/consumer_contract/headers_spec.rb
568
607
  - spec/lib/pact/consumer_contract/interaction_spec.rb
569
608
  - spec/lib/pact/consumer_contract/request_spec.rb
570
609
  - spec/lib/pact/doc/generator_spec.rb
@@ -600,8 +639,10 @@ test_files:
600
639
  - spec/lib/pact/provider/world_spec.rb
601
640
  - spec/lib/pact/reification_spec.rb
602
641
  - spec/lib/pact/shared/dsl_spec.rb
642
+ - spec/lib/pact/shared/json_differ_spec.rb
603
643
  - spec/lib/pact/shared/key_not_found_spec.rb
604
644
  - spec/lib/pact/shared/request_spec.rb
645
+ - spec/lib/pact/shared/text_differ_spec.rb
605
646
  - spec/lib/pact/something_like_spec.rb
606
647
  - spec/lib/pact/tasks/task_helper_spec.rb
607
648
  - spec/lib/pact/tasks/verification_task_spec.rb
@@ -631,3 +672,4 @@ test_files:
631
672
  - spec/support/term.json
632
673
  - spec/support/test_app_fail.json
633
674
  - spec/support/test_app_pass.json
675
+ - spec/support/test_app_with_right_content_type_differ.json