pact 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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