pact-support 1.3.0.alpha.2 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -0
- data/CHANGELOG.md +13 -2
- data/RELEASING.md +2 -12
- data/lib/pact/configuration.rb +2 -4
- data/lib/pact/consumer_contract/consumer_contract.rb +9 -15
- data/lib/pact/consumer_contract/file_name.rb +5 -1
- data/lib/pact/consumer_contract/interaction.rb +1 -5
- data/lib/pact/consumer_contract/query_string.rb +0 -1
- data/lib/pact/matchers/matchers.rb +1 -1
- data/lib/pact/matching_rules/jsonpath.rb +3 -4
- data/lib/pact/reification.rb +2 -2
- data/lib/pact/shared/form_differ.rb +2 -3
- data/lib/pact/shared/json_differ.rb +1 -3
- data/lib/pact/shared/request.rb +0 -1
- data/lib/pact/shared/text_differ.rb +0 -1
- data/lib/pact/support/version.rb +1 -1
- data/pact-support.gemspec +3 -1
- data/script/release.sh +9 -0
- data/spec/lib/pact/consumer_contract/consumer_contract_spec.rb +32 -35
- data/spec/lib/pact/consumer_contract/file_name_spec.rb +11 -2
- data/spec/lib/pact/matchers/list_diff_formatter_spec.rb +2 -1
- data/spec/lib/pact/matchers/matchers_messages_mismatched_value_spec.rb +10 -8
- data/spec/lib/pact/matchers/matchers_messages_regexp_spec.rb +10 -8
- data/spec/lib/pact/matchers/type_difference_spec.rb +3 -1
- data/spec/lib/pact/matchers/unix_diff_formatter_spec.rb +3 -1
- data/spec/support/ruby_version_helpers.rb +23 -0
- data/tasks/release.rake +5 -0
- data/tasks/spec.rake +1 -0
- metadata +38 -7
- data/lib/pact/consumer_contract/http_consumer_contract_parser.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bc207d989ed7eac517729f4664305316b83b64b
|
4
|
+
data.tar.gz: 5e1a83e3f0d51d01ef712ee33091ef070b926ba6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc3a3af1fa03f3d920741bd65e0bf83047bc29eddea3109d755cababd978d0de9e26f2c1e3c944f79623b2d41ef06416184357c2247d62b6e072b5059c81d33c
|
7
|
+
data.tar.gz: 286126e9c5cc0e5c617e0c1cb324a5453a82b8b37f34dc367ded266dbb19618d1f7cbf7f73029b6ed83a3850cb2c9ee325caa642acf844347998d0122f407eb8
|
data/.travis.yml
CHANGED
@@ -4,6 +4,8 @@ rvm:
|
|
4
4
|
- 2.1.8
|
5
5
|
- 2.2.4
|
6
6
|
- 2.3.1
|
7
|
+
- 2.4.3
|
8
|
+
- 2.5.0
|
7
9
|
- jruby-9.1.13.0
|
8
10
|
gemfile:
|
9
11
|
- gemfiles/default.gemfile
|
@@ -19,5 +21,9 @@ matrix:
|
|
19
21
|
gemfile: gemfiles/ruby_under_22.gemfile
|
20
22
|
- rvm: 2.3.1
|
21
23
|
gemfile: gemfiles/ruby_under_22.gemfile
|
24
|
+
- rvm: 2.4.3
|
25
|
+
gemfile: gemfiles/ruby_under_22.gemfile
|
26
|
+
- rvm: 2.5.0
|
27
|
+
gemfile: gemfiles/ruby_under_22.gemfile
|
22
28
|
- rvm: jruby-9.1.13.0
|
23
29
|
gemfile: gemfiles/ruby_under_22.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,17 @@
|
|
1
|
-
|
1
|
+
<a name="v1.3.0"></a>
|
2
|
+
### v1.3.0 (2018-03-19)
|
2
3
|
|
3
|
-
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* do not automatically create tmp/pacts dir ([de9e25e](/../../commit/de9e25e))
|
7
|
+
|
8
|
+
|
9
|
+
<a name="v1.2.5"></a>
|
10
|
+
### v1.2.5 (2018-02-16)
|
11
|
+
|
12
|
+
#### Bug Fixes
|
13
|
+
|
14
|
+
* replace backslashes in pact dir path with forward slashes ([a1b5013](/../../commit/a1b5013))
|
4
15
|
|
5
16
|
### 1.2.4 (2017-10-30)
|
6
17
|
* 80bbdcc - fix: remove unused dependency on rack-test (Beth Skurrie, Mon Oct 30 09:52:22 2017 +1100)
|
data/RELEASING.md
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
# Releasing
|
2
2
|
|
3
|
-
|
4
|
-
2. Update the `CHANGELOG.md` using:
|
3
|
+
Run
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
3. Add files to git
|
9
|
-
|
10
|
-
$ git add CHANGELOG.md lib/pact/support/version.rb
|
11
|
-
$ git commit -m "chore(release): version $(ruby -r ./lib/pact/support/version.rb -e "puts Pact::Support::VERSION")"
|
12
|
-
|
13
|
-
3. Release:
|
14
|
-
|
15
|
-
$ bundle exec rake release
|
5
|
+
script/release.sh [major|minor|patch] # default is minor
|
data/lib/pact/configuration.rb
CHANGED
@@ -72,8 +72,8 @@ module Pact
|
|
72
72
|
|
73
73
|
# Should this be deprecated in favour of register_diff_formatter???
|
74
74
|
def diff_formatter= diff_formatter
|
75
|
-
register_diff_formatter
|
76
|
-
register_diff_formatter
|
75
|
+
register_diff_formatter(/.*/, diff_formatter)
|
76
|
+
register_diff_formatter(nil, diff_formatter)
|
77
77
|
end
|
78
78
|
|
79
79
|
def register_diff_formatter content_type, diff_formatter
|
@@ -174,11 +174,9 @@ module Pact
|
|
174
174
|
|
175
175
|
def self.configure
|
176
176
|
yield configuration
|
177
|
-
FileUtils::mkdir_p configuration.tmp_dir
|
178
177
|
end
|
179
178
|
|
180
179
|
def self.clear_configuration
|
181
180
|
@configuration = nil
|
182
181
|
end
|
183
|
-
|
184
182
|
end
|
@@ -10,9 +10,9 @@ require 'pact/consumer_contract/service_consumer'
|
|
10
10
|
require 'pact/consumer_contract/service_provider'
|
11
11
|
require 'pact/consumer_contract/interaction'
|
12
12
|
require 'pact/consumer_contract/pact_file'
|
13
|
-
require 'pact/consumer_contract/http_consumer_contract_parser'
|
14
13
|
|
15
14
|
module Pact
|
15
|
+
|
16
16
|
class ConsumerContract
|
17
17
|
|
18
18
|
include SymbolizeKeys
|
@@ -29,19 +29,13 @@ module Pact
|
|
29
29
|
@provider = attributes[:provider]
|
30
30
|
end
|
31
31
|
|
32
|
-
def self.add_parser consumer_contract_parser
|
33
|
-
parsers << consumer_contract_parser
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.parsers
|
37
|
-
@parsers ||= [Pact::HttpConsumerContractParser.new]
|
38
|
-
end
|
39
|
-
|
40
32
|
def self.from_hash(hash)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
33
|
+
hash = symbolize_keys(hash)
|
34
|
+
new(
|
35
|
+
:consumer => ServiceConsumer.from_hash(hash[:consumer]),
|
36
|
+
:provider => ServiceProvider.from_hash(hash[:provider]),
|
37
|
+
:interactions => hash[:interactions].collect { |h| Interaction.from_hash(h)}
|
38
|
+
)
|
45
39
|
end
|
46
40
|
|
47
41
|
def self.from_json string
|
@@ -60,9 +54,9 @@ module Pact
|
|
60
54
|
def find_interaction criteria
|
61
55
|
interactions = find_interactions criteria
|
62
56
|
if interactions.size == 0
|
63
|
-
raise
|
57
|
+
raise "Could not find interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}."
|
64
58
|
elsif interactions.size > 1
|
65
|
-
raise
|
59
|
+
raise "Found more than 1 interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}."
|
66
60
|
end
|
67
61
|
interactions.first
|
68
62
|
end
|
@@ -8,11 +8,15 @@ module Pact
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def file_path consumer_name, provider_name, pact_dir = Pact.configuration.pact_dir, options = {}
|
11
|
-
File.join(pact_dir, file_name(consumer_name, provider_name, options))
|
11
|
+
File.join(windows_safe(pact_dir), file_name(consumer_name, provider_name, options))
|
12
12
|
end
|
13
13
|
|
14
14
|
def filenamify name
|
15
15
|
name.downcase.gsub(/\s/, '_')
|
16
16
|
end
|
17
|
+
|
18
|
+
def windows_safe(pact_dir)
|
19
|
+
pact_dir.gsub("\\", "/")
|
20
|
+
end
|
17
21
|
end
|
18
22
|
end
|
@@ -6,7 +6,7 @@ require 'pact/matching_rules'
|
|
6
6
|
require 'pact/errors'
|
7
7
|
|
8
8
|
module Pact
|
9
|
-
|
9
|
+
class Interaction
|
10
10
|
include ActiveSupportSupport
|
11
11
|
include SymbolizeKeys
|
12
12
|
|
@@ -36,10 +36,6 @@ module Pact
|
|
36
36
|
}
|
37
37
|
end
|
38
38
|
|
39
|
-
def http?
|
40
|
-
true
|
41
|
-
end
|
42
|
-
|
43
39
|
def validate!
|
44
40
|
raise Pact::InvalidInteractionError.new(self) unless description && request && response
|
45
41
|
end
|
@@ -224,7 +224,7 @@ module Pact
|
|
224
224
|
expected_desc = class_name_with_value_in_brackets(expected)
|
225
225
|
expected_desc.gsub!("(", "(like ")
|
226
226
|
actual_desc = class_name_with_value_in_brackets(actual)
|
227
|
-
|
227
|
+
"Expected #{expected_desc} but got #{actual_desc} at <path>"
|
228
228
|
end
|
229
229
|
end
|
230
230
|
end
|
@@ -13,7 +13,6 @@ module Pact
|
|
13
13
|
def initialize(path)
|
14
14
|
scanner = StringScanner.new(path)
|
15
15
|
@path = []
|
16
|
-
bracket_count = 0
|
17
16
|
while not scanner.eos?
|
18
17
|
if token = scanner.scan(/\$/)
|
19
18
|
@path << token
|
@@ -49,10 +48,10 @@ module Pact
|
|
49
48
|
@path.last << token
|
50
49
|
end
|
51
50
|
end
|
51
|
+
end
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
end
|
53
|
+
def to_s
|
54
|
+
path.join
|
56
55
|
end
|
57
56
|
end
|
58
57
|
end
|
data/lib/pact/reification.rb
CHANGED
@@ -15,8 +15,8 @@ module Pact
|
|
15
15
|
when Pact::Term, Regexp, Pact::SomethingLike, Pact::ArrayLike
|
16
16
|
from_term(term.generate)
|
17
17
|
when Hash
|
18
|
-
term.inject({}) do |mem, (key,
|
19
|
-
mem[key] = from_term(
|
18
|
+
term.inject({}) do |mem, (key,t)|
|
19
|
+
mem[key] = from_term(t)
|
20
20
|
mem
|
21
21
|
end
|
22
22
|
when Array
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'pact/matchers/matchers'
|
2
1
|
require 'uri'
|
3
2
|
|
4
3
|
module Pact
|
@@ -19,8 +18,8 @@ module Pact
|
|
19
18
|
end
|
20
19
|
|
21
20
|
def self.ensure_values_are_arrays hash
|
22
|
-
hash.each_with_object({}) do | (key, value),
|
23
|
-
|
21
|
+
hash.each_with_object({}) do | (key, value), h |
|
22
|
+
h[key.to_s] = [*value]
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require 'pact/matchers/matchers'
|
2
|
-
|
3
1
|
module Pact
|
4
2
|
class JsonDiffer
|
5
3
|
|
6
4
|
extend Matchers
|
7
5
|
|
8
|
-
# Delegates to https://github.com/
|
6
|
+
# Delegates to https://github.com/pact-foundation/pact-support/blob/master/lib/pact/matchers/matchers.rb#L25
|
9
7
|
def self.call expected, actual, options = {}
|
10
8
|
diff expected, actual, options
|
11
9
|
end
|
data/lib/pact/shared/request.rb
CHANGED
data/lib/pact/support/version.rb
CHANGED
data/pact-support.gemspec
CHANGED
@@ -28,10 +28,12 @@ Gem::Specification.new do |gem|
|
|
28
28
|
gem.add_runtime_dependency 'awesome_print', '~> 1.1'
|
29
29
|
|
30
30
|
gem.add_development_dependency 'rake', '~> 10.0.3'
|
31
|
-
gem.add_development_dependency 'webmock', '~>
|
31
|
+
gem.add_development_dependency 'webmock', '~> 3.3'
|
32
32
|
gem.add_development_dependency 'pry'
|
33
33
|
gem.add_development_dependency 'fakefs', '~> 0.11.2'
|
34
34
|
gem.add_development_dependency 'hashie', '~> 2.0'
|
35
35
|
gem.add_development_dependency 'activesupport'
|
36
36
|
gem.add_development_dependency 'appraisal'
|
37
|
+
gem.add_development_dependency 'conventional-changelog', '~>1.3'
|
38
|
+
gem.add_development_dependency 'bump', '~> 0.5'
|
37
39
|
end
|
data/script/release.sh
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
set -e
|
3
|
+
|
4
|
+
git checkout -- lib/pact/support/version.rb
|
5
|
+
bundle exec bump ${1:-minor} --no-commit
|
6
|
+
bundle exec rake generate_changelog
|
7
|
+
git add CHANGELOG.md lib/pact/support/version.rb
|
8
|
+
git commit -m "Releasing version $(ruby -r ./lib/pact/support/version.rb -e "puts Pact::Support::VERSION")"
|
9
|
+
bundle exec rake release
|
@@ -3,53 +3,50 @@ require 'pact/consumer_contract'
|
|
3
3
|
|
4
4
|
module Pact
|
5
5
|
describe ConsumerContract do
|
6
|
-
describe ".from_json" do
|
7
6
|
|
7
|
+
describe ".from_json" do
|
8
8
|
let(:loaded_pact) { ConsumerContract.from_json(string) }
|
9
|
+
context "when the top level object is a ConsumerContract" do
|
10
|
+
let(:string) { '{"interactions":[{"request": {"path":"/path", "method" : "get"}, "response": {"status" : 200}}], "consumer": {"name" : "Bob"} , "provider": {"name" : "Mary"} }' }
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
it "should create a Pact" do
|
15
|
-
expect(loaded_pact).to be_instance_of ConsumerContract
|
16
|
-
end
|
12
|
+
it "should create a Pact" do
|
13
|
+
expect(loaded_pact).to be_instance_of ConsumerContract
|
14
|
+
end
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
it "should have interactions" do
|
17
|
+
expect(loaded_pact.interactions).to be_instance_of Array
|
18
|
+
end
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
it "should have a consumer" do
|
21
|
+
expect(loaded_pact.consumer).to be_instance_of Pact::ServiceConsumer
|
22
|
+
end
|
25
23
|
|
26
|
-
|
27
|
-
|
28
|
-
end
|
24
|
+
it "should have a provider" do
|
25
|
+
expect(loaded_pact.provider).to be_instance_of Pact::ServiceProvider
|
29
26
|
end
|
27
|
+
end
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
context "with old 'producer' key" do
|
30
|
+
let(:string) { File.read('./spec/support/a_consumer-a_producer.json')}
|
31
|
+
it "should create a Pact" do
|
32
|
+
expect(loaded_pact).to be_instance_of ConsumerContract
|
33
|
+
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
it "should have interactions" do
|
36
|
+
expect(loaded_pact.interactions).to be_instance_of Array
|
37
|
+
end
|
40
38
|
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
it "should have a consumer" do
|
40
|
+
expect(loaded_pact.consumer).to be_instance_of Pact::ServiceConsumer
|
41
|
+
end
|
44
42
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
it "should have a provider" do
|
44
|
+
expect(loaded_pact.provider).to be_instance_of Pact::ServiceProvider
|
45
|
+
expect(loaded_pact.provider.name).to eq "an old producer"
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
end
|
48
|
+
it "should have a provider_state" do
|
49
|
+
expect(loaded_pact.interactions.first.provider_state).to eq 'state one'
|
53
50
|
end
|
54
51
|
end
|
55
52
|
end
|
@@ -3,13 +3,22 @@ require 'pact/consumer_contract/file_name'
|
|
3
3
|
module Pact
|
4
4
|
describe FileName do
|
5
5
|
describe "file_path" do
|
6
|
-
|
6
|
+
|
7
|
+
subject { FileName.file_path 'foo', 'bar', 'tmp/pacts' }
|
7
8
|
it { is_expected.to eq 'tmp/pacts/foo-bar.json' }
|
8
9
|
|
9
10
|
context "when unique is true" do
|
10
|
-
|
11
|
+
subject { FileName.file_path 'foo', 'bar', 'tmp/pacts', unique: true }
|
11
12
|
it { is_expected.to match %r{tmp/pacts/foo-bar-\d+.json} }
|
12
13
|
end
|
14
|
+
|
15
|
+
context "when the path includes backslashes" do
|
16
|
+
subject { FileName.file_path 'foo', 'bar', 'c:\tmp\pacts' }
|
17
|
+
|
18
|
+
it "changes them to forward slashes" do
|
19
|
+
expect(subject).to eq "c:/tmp/pacts/foo-bar.json"
|
20
|
+
end
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
15
24
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'pact/matchers/list_diff_formatter'
|
3
3
|
require 'pact/matchers/matchers'
|
4
|
+
require 'support/ruby_version_helpers'
|
4
5
|
|
5
6
|
# Needed to stop the ai printing in color
|
6
7
|
# TODO: fix this!
|
@@ -23,7 +24,7 @@ module Pact
|
|
23
24
|
\tExpected type:
|
24
25
|
\t\tString
|
25
26
|
\tActual type:
|
26
|
-
\t\
|
27
|
+
\t\t#{RubyVersionHelpers.numeric_type}
|
27
28
|
EOS
|
28
29
|
}
|
29
30
|
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'pact/matchers'
|
3
3
|
require 'pact/consumer_contract/headers'
|
4
|
+
require 'support/ruby_version_helpers'
|
4
5
|
|
5
6
|
module Pact::Matchers
|
6
7
|
|
7
8
|
describe Pact::Matchers do
|
8
9
|
include Pact::Matchers
|
10
|
+
extend RubyVersionHelpers
|
9
11
|
|
10
12
|
describe "diff" do
|
11
13
|
STRING = "foo"
|
@@ -23,7 +25,7 @@ module Pact::Matchers
|
|
23
25
|
[STRING, ARRAY, "Expected \"foo\" but got an Array at <path>"],
|
24
26
|
[Pact.like(STRING), "bar", nil],
|
25
27
|
[Pact.like(STRING), nil, "Expected a String (like \"foo\") but got nil at <path>"],
|
26
|
-
[Pact.like(STRING), INT, "Expected a String (like \"foo\") but got
|
28
|
+
[Pact.like(STRING), INT, "Expected a String (like \"foo\") but got #{a_numeric} (1) at <path>"],
|
27
29
|
[Pact.like(STRING), FLOAT, "Expected a String (like \"foo\") but got a Float (1.0) at <path>"],
|
28
30
|
[Pact.like(STRING), HASH, "Expected a String (like \"foo\") but got a Hash at <path>"],
|
29
31
|
[Pact.like(STRING), ARRAY, "Expected a String (like \"foo\") but got an Array at <path>"],
|
@@ -34,22 +36,22 @@ module Pact::Matchers
|
|
34
36
|
[INT, HASH, "Expected 1 but got a Hash at <path>"],
|
35
37
|
[INT, ARRAY, "Expected 1 but got an Array at <path>"],
|
36
38
|
[Pact.like(INT), 2, nil],
|
37
|
-
[Pact.like(INT), nil, "Expected
|
38
|
-
[Pact.like(INT), STRING, "Expected
|
39
|
-
[Pact.like(INT), FLOAT, "Expected
|
40
|
-
[Pact.like(INT), HASH, "Expected
|
41
|
-
[Pact.like(INT), ARRAY, "Expected
|
39
|
+
[Pact.like(INT), nil, "Expected #{a_numeric} (like 1) but got nil at <path>"],
|
40
|
+
[Pact.like(INT), STRING, "Expected #{a_numeric} (like 1) but got a String (\"foo\") at <path>"],
|
41
|
+
[Pact.like(INT), FLOAT, "Expected #{a_numeric} (like 1) but got a Float (1.0) at <path>"],
|
42
|
+
[Pact.like(INT), HASH, "Expected #{a_numeric} (like 1) but got a Hash at <path>"],
|
43
|
+
[Pact.like(INT), ARRAY, "Expected #{a_numeric} (like 1) but got an Array at <path>"],
|
42
44
|
[HASH, HASH, nil],
|
43
45
|
[HASH, nil, "Expected a Hash but got nil at <path>"],
|
44
46
|
[HASH, STRING, "Expected a Hash but got a String (\"foo\") at <path>"],
|
45
|
-
[HASH, INT, "Expected a Hash but got
|
47
|
+
[HASH, INT, "Expected a Hash but got #{a_numeric} (1) at <path>"],
|
46
48
|
[HASH, FLOAT, "Expected a Hash but got a Float (1.0) at <path>"],
|
47
49
|
[HASH, ARRAY, "Expected a Hash but got an Array at <path>"],
|
48
50
|
[Pact.like(HASH), STRING, "Expected a Hash but got a String (\"foo\") at <path>"],
|
49
51
|
[ARRAY, ARRAY, nil],
|
50
52
|
[ARRAY, nil, "Expected an Array but got nil at <path>"],
|
51
53
|
[ARRAY, STRING, "Expected an Array but got a String (\"foo\") at <path>"],
|
52
|
-
[ARRAY, INT, "Expected an Array but got
|
54
|
+
[ARRAY, INT, "Expected an Array but got #{a_numeric} (1) at <path>"],
|
53
55
|
[ARRAY, FLOAT, "Expected an Array but got a Float (1.0) at <path>"],
|
54
56
|
[ARRAY, HASH, "Expected an Array but got a Hash at <path>"]
|
55
57
|
]
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'pact/matchers'
|
3
3
|
require 'pact/consumer_contract/headers'
|
4
|
+
require 'support/ruby_version_helpers'
|
4
5
|
|
5
6
|
module Pact::Matchers
|
6
7
|
|
7
8
|
describe Pact::Matchers do
|
8
9
|
include Pact::Matchers
|
10
|
+
include RubyVersionHelpers
|
9
11
|
|
10
12
|
describe "diff" do
|
11
13
|
STRING = "foo"
|
@@ -29,10 +31,10 @@ module Pact::Matchers
|
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
32
|
-
context "when the actual is a
|
34
|
+
context "when the actual is a numeric" do
|
33
35
|
let(:actual) { INT }
|
34
36
|
it "returns a message" do
|
35
|
-
expect(difference[:thing].message).to eq "Expected a String matching /foo/ (like \"food\") but got
|
37
|
+
expect(difference[:thing].message).to eq "Expected a String matching /foo/ (like \"food\") but got #{a_numeric} (1) at <path>"
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -43,10 +45,10 @@ module Pact::Matchers
|
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
|
-
context "when the actual is a
|
48
|
+
context "when the actual is a numeric" do
|
47
49
|
let(:actual) { INT }
|
48
50
|
it "returns a message" do
|
49
|
-
expect(difference[:thing].message).to eq "Expected a String matching /foo/ (like \"food\") but got
|
51
|
+
expect(difference[:thing].message).to eq "Expected a String matching /foo/ (like \"food\") but got #{a_numeric} (1) at <path>"
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
@@ -68,10 +70,10 @@ module Pact::Matchers
|
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
|
-
context "when the actual is a
|
73
|
+
context "when the actual is a numeric" do
|
72
74
|
let(:actual) { INT }
|
73
75
|
it "returns a message" do
|
74
|
-
expect(difference[:thing].message).to eq "Expected a String matching /foo/ but got
|
76
|
+
expect(difference[:thing].message).to eq "Expected a String matching /foo/ but got #{a_numeric} (1) at <path>"
|
75
77
|
end
|
76
78
|
end
|
77
79
|
|
@@ -82,10 +84,10 @@ module Pact::Matchers
|
|
82
84
|
end
|
83
85
|
end
|
84
86
|
|
85
|
-
context "when the actual is a
|
87
|
+
context "when the actual is a numeric" do
|
86
88
|
let(:actual) { INT }
|
87
89
|
it "returns a message" do
|
88
|
-
expect(difference[:thing].message).to eq "Expected a String matching /foo/ but got
|
90
|
+
expect(difference[:thing].message).to eq "Expected a String matching /foo/ but got #{a_numeric} (1) at <path>"
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'pact/matchers/type_difference'
|
3
|
+
require 'support/ruby_version_helpers'
|
3
4
|
|
4
5
|
module Pact
|
5
6
|
module Matchers
|
6
7
|
describe TypeDifference do
|
8
|
+
include RubyVersionHelpers
|
7
9
|
|
8
10
|
describe "#as_json" do
|
9
11
|
|
@@ -21,7 +23,7 @@ module Pact
|
|
21
23
|
end
|
22
24
|
|
23
25
|
context "when the actual is an ActualType" do
|
24
|
-
let(:expected_hash) { {:EXPECTED_TYPE => "String", :ACTUAL_TYPE =>
|
26
|
+
let(:expected_hash) { {:EXPECTED_TYPE => "String", :ACTUAL_TYPE => numeric_type.to_s } }
|
25
27
|
|
26
28
|
it "uses the key ACTUAL_TYPE" do
|
27
29
|
expect(subject.as_json).to eq(expected_hash)
|
@@ -2,10 +2,12 @@ require 'spec_helper'
|
|
2
2
|
require 'pact/matchers/unix_diff_formatter'
|
3
3
|
require 'pact/matchers/expected_type'
|
4
4
|
require 'pact/matchers/actual_type'
|
5
|
+
require 'support/ruby_version_helpers'
|
5
6
|
|
6
7
|
module Pact
|
7
8
|
module Matchers
|
8
9
|
describe UnixDiffFormatter do
|
10
|
+
include RubyVersionHelpers
|
9
11
|
|
10
12
|
describe ".call" do
|
11
13
|
|
@@ -35,7 +37,7 @@ module Pact
|
|
35
37
|
let(:output) { <<-EOF
|
36
38
|
{
|
37
39
|
- "thing": String
|
38
|
-
+ "thing":
|
40
|
+
+ "thing": #{numeric_type}
|
39
41
|
}
|
40
42
|
EOF
|
41
43
|
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RubyVersionHelpers
|
2
|
+
RUBY_2_4 = Gem::Version.new('2.4.0')
|
3
|
+
CURRENT_RUBY = Gem::Version.new(RUBY_VERSION)
|
4
|
+
|
5
|
+
def numeric_type
|
6
|
+
if CURRENT_RUBY < RUBY_2_4
|
7
|
+
Fixnum
|
8
|
+
else
|
9
|
+
Integer
|
10
|
+
end
|
11
|
+
end
|
12
|
+
module_function :numeric_type
|
13
|
+
|
14
|
+
def a_numeric
|
15
|
+
type = numeric_type
|
16
|
+
if type == Integer
|
17
|
+
"an #{type}"
|
18
|
+
else
|
19
|
+
"a #{type}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
module_function :a_numeric
|
23
|
+
end
|
data/tasks/release.rake
ADDED
data/tasks/spec.rake
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact-support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Fraser
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2018-03-
|
15
|
+
date: 2018-03-18 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: randexp
|
@@ -132,14 +132,14 @@ dependencies:
|
|
132
132
|
requirements:
|
133
133
|
- - "~>"
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version:
|
135
|
+
version: '3.3'
|
136
136
|
type: :development
|
137
137
|
prerelease: false
|
138
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
140
|
- - "~>"
|
141
141
|
- !ruby/object:Gem::Version
|
142
|
-
version:
|
142
|
+
version: '3.3'
|
143
143
|
- !ruby/object:Gem::Dependency
|
144
144
|
name: pry
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,6 +210,34 @@ dependencies:
|
|
210
210
|
- - ">="
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '0'
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
name: conventional-changelog
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - "~>"
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: '1.3'
|
220
|
+
type: :development
|
221
|
+
prerelease: false
|
222
|
+
version_requirements: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - "~>"
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: '1.3'
|
227
|
+
- !ruby/object:Gem::Dependency
|
228
|
+
name: bump
|
229
|
+
requirement: !ruby/object:Gem::Requirement
|
230
|
+
requirements:
|
231
|
+
- - "~>"
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: '0.5'
|
234
|
+
type: :development
|
235
|
+
prerelease: false
|
236
|
+
version_requirements: !ruby/object:Gem::Requirement
|
237
|
+
requirements:
|
238
|
+
- - "~>"
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: '0.5'
|
213
241
|
description:
|
214
242
|
email:
|
215
243
|
- james.fraser@alumni.swinburne.edu
|
@@ -240,7 +268,6 @@ files:
|
|
240
268
|
- lib/pact/consumer_contract/consumer_contract.rb
|
241
269
|
- lib/pact/consumer_contract/file_name.rb
|
242
270
|
- lib/pact/consumer_contract/headers.rb
|
243
|
-
- lib/pact/consumer_contract/http_consumer_contract_parser.rb
|
244
271
|
- lib/pact/consumer_contract/interaction.rb
|
245
272
|
- lib/pact/consumer_contract/pact_file.rb
|
246
273
|
- lib/pact/consumer_contract/query.rb
|
@@ -293,6 +320,7 @@ files:
|
|
293
320
|
- lib/pact/term.rb
|
294
321
|
- lib/tasks/pact.rake
|
295
322
|
- pact-support.gemspec
|
323
|
+
- script/release.sh
|
296
324
|
- script/update-pact-specification-v2
|
297
325
|
- spec/fixtures/interaction-with-matching-rules.json
|
298
326
|
- spec/integration/matching_rules_extract_and_merge_spec.rb
|
@@ -356,6 +384,7 @@ files:
|
|
356
384
|
- spec/support/markdown_pact.json
|
357
385
|
- spec/support/missing_provider_states_output.txt
|
358
386
|
- spec/support/options.json
|
387
|
+
- spec/support/ruby_version_helpers.rb
|
359
388
|
- spec/support/shared_examples_for_request.rb
|
360
389
|
- spec/support/spec_support.rb
|
361
390
|
- spec/support/stubbing.json
|
@@ -363,6 +392,7 @@ files:
|
|
363
392
|
- spec/support/test_app_fail.json
|
364
393
|
- spec/support/test_app_pass.json
|
365
394
|
- spec/support/test_app_with_right_content_type_differ.json
|
395
|
+
- tasks/release.rake
|
366
396
|
- tasks/spec.rake
|
367
397
|
homepage: https://github.com/bethesque/pact-support
|
368
398
|
licenses:
|
@@ -379,9 +409,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
379
409
|
version: '2.0'
|
380
410
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
381
411
|
requirements:
|
382
|
-
- - "
|
412
|
+
- - ">="
|
383
413
|
- !ruby/object:Gem::Version
|
384
|
-
version:
|
414
|
+
version: '0'
|
385
415
|
requirements: []
|
386
416
|
rubyforge_project:
|
387
417
|
rubygems_version: 2.4.5.2
|
@@ -451,6 +481,7 @@ test_files:
|
|
451
481
|
- spec/support/markdown_pact.json
|
452
482
|
- spec/support/missing_provider_states_output.txt
|
453
483
|
- spec/support/options.json
|
484
|
+
- spec/support/ruby_version_helpers.rb
|
454
485
|
- spec/support/shared_examples_for_request.rb
|
455
486
|
- spec/support/spec_support.rb
|
456
487
|
- spec/support/stubbing.json
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Pact
|
2
|
-
class HttpConsumerContractParser
|
3
|
-
include SymbolizeKeys
|
4
|
-
|
5
|
-
def call(hash)
|
6
|
-
hash = symbolize_keys(hash)
|
7
|
-
interactions = if hash[:interactions]
|
8
|
-
hash[:interactions].collect { |hash| Interaction.from_hash(hash)}
|
9
|
-
elsif hash[:messages]
|
10
|
-
hash[:messages].collect { |hash| Message.from_hash(hash)}
|
11
|
-
else
|
12
|
-
[] # or raise an error?
|
13
|
-
end
|
14
|
-
|
15
|
-
ConsumerContract.new(
|
16
|
-
:consumer => ServiceConsumer.from_hash(hash[:consumer]),
|
17
|
-
:provider => ServiceProvider.from_hash(hash[:provider]),
|
18
|
-
:interactions => interactions
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
def can_parse?(hash)
|
23
|
-
hash.key?('interactions') || hash.key?(:interactions)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|