pact 1.1.0.rc3 → 1.1.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +44 -36
- data/Gemfile.lock +1 -1
- data/example/zoo-app/Gemfile.lock +1 -1
- data/example/zoo-app/doc/{markdown → pacts/markdown}/README.md +0 -0
- data/example/zoo-app/doc/markdown/Zoo App - Animal Service.md b/data/example/zoo-app/doc/pacts/markdown/Zoo App - Animal → Service.md +0 -0
- data/lib/pact/configuration.rb +39 -38
- data/lib/pact/consumer/mock_service/interaction_post.rb +2 -2
- data/lib/pact/consumer/mock_service/interaction_replay.rb +14 -7
- data/lib/pact/doc/generator.rb +3 -2
- data/lib/pact/doc/interaction_view_model.rb +1 -1
- data/lib/pact/reification.rb +2 -0
- data/lib/pact/shared/request.rb +10 -11
- data/lib/pact/version.rb +1 -1
- data/spec/lib/pact/configuration_spec.rb +31 -0
- data/spec/lib/pact/doc/generator_spec.rb +16 -1
- data/spec/lib/pact/doc/interaction_view_model_spec.rb +20 -0
- data/spec/lib/pact/reification_spec.rb +12 -0
- data/spec/lib/pact/shared/request_spec.rb +51 -0
- data/spec/support/interaction_view_model_with_terms.json +50 -0
- metadata +6 -7
data/CHANGELOG.md
CHANGED
@@ -1,44 +1,52 @@
|
|
1
1
|
Do this to generate your change history
|
2
2
|
|
3
|
-
|
3
|
+
git log --pretty=format:' * %h - %s (%an, %ad)'
|
4
|
+
|
5
|
+
### 1.1.0.rc4 (1 May 2014)
|
6
|
+
|
7
|
+
* 5e1b78d - Display / in logs when path is empty https://github.com/realestate-com-au/pact/issues/14 (Beth, Thu May 1 22:09:29 2014 +1000)
|
8
|
+
* 01c5414 - Fixing doc generation bug where Pact::Terms were being displayed https://github.com/realestate-com-au/pact/issues/13 (Beth, Thu May 1 21:41:11 2014 +1000)
|
9
|
+
* 292a14b - Cleaning doc dir before generating new docs as per https://github.com/realestate-com-au/pact/issues/11 (Beth, Tue Apr 29 12:44:47 2014 +1000)
|
10
|
+
* 73c15dd - Changed default doc_dir to ./doc/pacts as per https://github.com/realestate-com-au/pact/issues/12 (Beth, Tue Apr 29 12:33:57 2014 +1000)
|
11
|
+
* 78ca78c - Fixed bug where log_dir was being ignored when set to a non default value (Beth, Tue Apr 29 07:50:32 2014 +1000)
|
4
12
|
|
5
13
|
### 1.1.0.rc3 (28 April 2014)
|
6
14
|
|
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
|
-
|
15
|
+
* 41fa409 - Cleaned up consumer after spec failure message (Beth, Sun Apr 27 22:18:03 2014 +1000)
|
16
|
+
* 8593fa9 - Updated zoo-app example (Beth, Sun Apr 27 20:54:51 2014 +1000)
|
17
|
+
* 716e3a8 - Added standalone consumer spec and spec for VerificationGet (Beth, Thu Apr 24 10:15:17 2014 +1000)
|
18
|
+
* c0f9bc6 - Copied RSpec::Expectations::Differ to Pact::Matchers::Differ - safer than trying to override behaviour (Beth, Thu Apr 24 09:17:58 2014 +
|
19
|
+
* 0eeb032 - Changing default diff_formatter to unix (Beth, Thu Apr 24 08:19:15 2014 +1000)
|
20
|
+
* ace5d4d - Update README.md (bethesque, Wed Apr 23 20:59:24 2014 +1000)
|
21
|
+
* 24efef6 - Update configuration.md (bethesque, Wed Apr 23 20:51:00 2014 +1000)
|
22
|
+
* 2d862b7 - Update best-practices.md (bethesque, Wed Apr 23 07:33:01 2014 +1000)
|
23
|
+
* ff8dfd2 - Updated doco (Beth, Tue Apr 22 21:45:17 2014 +1000)
|
24
|
+
* 88e4572 - Moving best practices into its own file (Beth, Tue Apr 22 21:28:36 2014 +1000)
|
25
|
+
* 5a3b92c - Moving provider state documentation out of main README into it's own file. (Beth, Tue Apr 22 19:59:48 2014 +1000)
|
26
|
+
* 1d568c4 - Updated configuration documentation (Beth, Tue Apr 22 13:06:47 2014 +1000)
|
27
|
+
* be1412e - Added configuration documentation (Beth, Tue Apr 22 13:04:33 2014 +1000)
|
28
|
+
* 9f9d178 - Added HAL raq (Beth, Tue Apr 22 12:51:42 2014 +1000)
|
29
|
+
* d9b6479 - Renamed ListOfPathsFormatter to ListDiffFormatter (Beth, Tue Apr 22 12:48:57 2014 +1000)
|
30
|
+
* 6b82402 - Renamed NestedJsonDiffFormatter to EmbeddedDiffFormatter (Beth, Tue Apr 22 12:45:50 2014 +1000)
|
31
|
+
* def8afd - Merge branch 'master' into release-1.1.0 (bethesque, Tue Apr 22 09:13:41 2014 +1000)
|
32
|
+
* 789a471 - Added generated docs to zoo-app (bethesque, Tue Apr 15 17:20:08 2014 +1000)
|
33
|
+
* f5da7ab - Improved header match failure message (bethesque, Tue Apr 15 09:39:12 2014 +1000)
|
34
|
+
* 1179489 - Stopped RSpec turning failure message lines that should be white to red (bethesque, Mon Apr 14 21:41:55 2014 +1000)
|
35
|
+
* ddad510 - Added type and regexp matching output to ListOfPathsFormatter (bethesque, Mon Apr 14 13:43:08 2014 +1000)
|
36
|
+
* b007248 - Added class based matching output to plus_and_minus diff formatter (bethesque, Sat Apr 12 21:20:43 2014 +1000)
|
37
|
+
* f7910a1 - Swapped colored for term-ansicolor, as the colored mixins clash with other gems (bethesque, Sat Apr 12 20:37:57 2014 +1000)
|
38
|
+
* 93bfbdb - Fixing failing tests caused by JRuby inserting a blank line between the braces of an empty hash. Moved ActiveSupportSupport into shared
|
39
|
+
* da16f95 - Added after hook to allow customisation of Doc::Generator (bethesque, Sat Apr 12 18:46:04 2014 +1000)
|
40
|
+
* 85a6fe3 - Breaking up configuration files into separate files (bethesque, Sat Apr 12 11:21:56 2014 +1000)
|
41
|
+
* 7515360 - Merge branch 'doc' into release-1.1.0 (bethesque, Sat Apr 12 10:37:51 2014 +1000)
|
42
|
+
* 1200481 - Removed pact_gem key from pact fixtures (bethesque, Wed Apr 9 22:19:02 2014 +1000)
|
43
|
+
* 72d791b - Ordered rendering of keys in markdown (bethesque, Wed Apr 9 22:15:01 2014 +1000)
|
44
|
+
* 000b223 - Hiding headers and body from docs when they are empty (bethesque, Wed Apr 9 21:46:02 2014 +1000)
|
45
|
+
* 7f6ed91 - Changing request key ordering so it makes more sense when reading it (bethesque, Wed Apr 9 21:45:31 2014 +1000)
|
46
|
+
* 65054a8 - Added index rendering (bethesque, Wed Apr 9 19:38:55 2014 +1000)
|
47
|
+
* 9426565 - Refactoring generation code. Fixed rendering of interaction in markdown when ActiveSupport is loaded (bethesque, Wed Apr 9 18:20:53 2014 +100
|
48
|
+
* 73d0dbf - WIP refactoring generator code (bethesque, Wed Apr 9 17:03:14 2014 +1000)
|
49
|
+
* 7d1d07b - WIP tests and refactor doc generator (bethesque, Wed Apr 9 13:36:46 2014 +1000)
|
42
50
|
|
43
51
|
### 1.0.39 (8 April 2014)
|
44
52
|
|
data/Gemfile.lock
CHANGED
File without changes
|
File without changes
|
data/lib/pact/configuration.rb
CHANGED
@@ -21,23 +21,28 @@ module Pact
|
|
21
21
|
attr_accessor :log_dir
|
22
22
|
attr_accessor :doc_dir
|
23
23
|
attr_accessor :reports_dir
|
24
|
-
|
24
|
+
attr_writer :logger
|
25
25
|
attr_accessor :tmp_dir
|
26
26
|
attr_writer :pactfile_write_mode
|
27
27
|
|
28
28
|
attr_accessor :error_stream
|
29
29
|
attr_accessor :output_stream
|
30
30
|
|
31
|
-
def
|
32
|
-
|
31
|
+
def self.default_configuration
|
32
|
+
c = Configuration.new
|
33
|
+
c.pact_dir = File.expand_path('./spec/pacts')
|
34
|
+
c.tmp_dir = File.expand_path('./tmp/pacts')
|
35
|
+
c.log_dir = default_log_dir
|
36
|
+
c.pactfile_write_mode = :overwrite
|
37
|
+
c.reports_dir = File.expand_path('./reports/pacts')
|
38
|
+
c.doc_dir = File.expand_path("./doc/pacts")
|
39
|
+
c.output_stream = $stdout
|
40
|
+
c.error_stream = $stderr
|
41
|
+
c
|
33
42
|
end
|
34
43
|
|
35
|
-
def
|
36
|
-
|
37
|
-
is_rake_running? ? :overwrite : :update
|
38
|
-
else
|
39
|
-
@pactfile_write_mode
|
40
|
-
end
|
44
|
+
def logger
|
45
|
+
@logger ||= create_logger
|
41
46
|
end
|
42
47
|
|
43
48
|
def doc_generator= doc_generator
|
@@ -72,16 +77,39 @@ module Pact
|
|
72
77
|
end
|
73
78
|
end
|
74
79
|
|
80
|
+
def log_path
|
81
|
+
log_dir + "/pact.log"
|
82
|
+
end
|
83
|
+
|
84
|
+
def pactfile_write_mode
|
85
|
+
if @pactfile_write_mode == :smart
|
86
|
+
is_rake_running? ? :overwrite : :update
|
87
|
+
else
|
88
|
+
@pactfile_write_mode
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
75
92
|
private
|
76
93
|
|
94
|
+
def self.default_log_dir
|
95
|
+
File.expand_path("./log")
|
96
|
+
end
|
97
|
+
|
77
98
|
#Would love a better way of determining this! It sure won't work on windows.
|
78
99
|
def is_rake_running?
|
79
100
|
`ps -ef | grep rake | grep #{Process.ppid} | grep -v 'grep'`.size > 0
|
80
101
|
end
|
102
|
+
|
103
|
+
def create_logger
|
104
|
+
FileUtils::mkdir_p log_dir
|
105
|
+
logger = Logger.new(log_path)
|
106
|
+
logger.level = Logger::DEBUG
|
107
|
+
logger
|
108
|
+
end
|
81
109
|
end
|
82
110
|
|
83
111
|
def self.configuration
|
84
|
-
@configuration ||= default_configuration
|
112
|
+
@configuration ||= Configuration.default_configuration
|
85
113
|
end
|
86
114
|
|
87
115
|
def self.configure
|
@@ -90,34 +118,7 @@ module Pact
|
|
90
118
|
end
|
91
119
|
|
92
120
|
def self.clear_configuration
|
93
|
-
@configuration =
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def self.default_configuration
|
99
|
-
c = Configuration.new
|
100
|
-
c.pact_dir = File.expand_path('./spec/pacts')
|
101
|
-
c.tmp_dir = File.expand_path('./tmp/pacts')
|
102
|
-
c.log_dir = default_log_dir
|
103
|
-
c.logger = default_logger c.log_path
|
104
|
-
c.pactfile_write_mode = :overwrite
|
105
|
-
c.reports_dir = File.expand_path('./reports/pacts')
|
106
|
-
c.doc_dir = File.expand_path("./doc")
|
107
|
-
c.output_stream = $stdout
|
108
|
-
c.error_stream = $stderr
|
109
|
-
c
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.default_log_dir
|
113
|
-
File.expand_path("./log")
|
114
|
-
end
|
115
|
-
|
116
|
-
def self.default_logger path
|
117
|
-
FileUtils::mkdir_p File.dirname(path)
|
118
|
-
logger = Logger.new(path)
|
119
|
-
logger.level = Logger::DEBUG
|
120
|
-
logger
|
121
|
+
@configuration = nil
|
121
122
|
end
|
122
123
|
|
123
124
|
end
|
@@ -23,9 +23,9 @@ module Pact
|
|
23
23
|
interaction = Interaction.from_hash(JSON.load(env['rack.input'].string))
|
24
24
|
interaction_list.add interaction
|
25
25
|
logger.info "Registered expected interaction #{interaction.request.method_and_path}"
|
26
|
-
logger.debug JSON.pretty_generate interaction
|
26
|
+
logger.debug JSON.pretty_generate JSON.parse(interaction.to_json)
|
27
27
|
[200, {}, ['Added interaction']]
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
|
-
end
|
31
|
+
end
|
@@ -29,8 +29,8 @@ module Pact
|
|
29
29
|
|
30
30
|
def find_response request_hash
|
31
31
|
actual_request = Request::Actual.from_hash(request_hash)
|
32
|
-
logger.info "
|
33
|
-
logger.debug
|
32
|
+
logger.info "Received request #{actual_request.method_and_path}"
|
33
|
+
logger.debug pretty_generate actual_request
|
34
34
|
candidate_interactions = interaction_list.find_candidate_interactions actual_request
|
35
35
|
matching_interactions = find_matching_interactions actual_request, from: candidate_interactions
|
36
36
|
|
@@ -52,8 +52,8 @@ module Pact
|
|
52
52
|
def handle_matched_interaction interaction
|
53
53
|
interaction_list.register_matched interaction
|
54
54
|
response = response_from(interaction.response)
|
55
|
-
logger.info "Found matching response
|
56
|
-
logger.
|
55
|
+
logger.info "Found matching response for #{interaction.request.method_and_path}"
|
56
|
+
logger.debug pretty_generate(interaction.response)
|
57
57
|
response
|
58
58
|
end
|
59
59
|
|
@@ -66,8 +66,10 @@ module Pact
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def handle_more_than_one_matching_interaction actual_request, matching_interactions
|
69
|
-
logger.error "Multiple interactions found
|
70
|
-
|
69
|
+
logger.error "Multiple interactions found for #{actual_request.method_and_path}:"
|
70
|
+
matching_interactions.each do | interaction |
|
71
|
+
logger.debug pretty_generate(interaction)
|
72
|
+
end
|
71
73
|
multiple_interactions_found_response actual_request, matching_interactions
|
72
74
|
end
|
73
75
|
|
@@ -119,6 +121,11 @@ module Pact
|
|
119
121
|
def logger_info_ap msg
|
120
122
|
logger.info msg
|
121
123
|
end
|
124
|
+
|
125
|
+
#Doesn't seem to reliably pretty generate unless we go to JSON and back again :(
|
126
|
+
def pretty_generate object
|
127
|
+
JSON.pretty_generate(JSON.parse(object.to_json))
|
128
|
+
end
|
122
129
|
end
|
123
130
|
end
|
124
|
-
end
|
131
|
+
end
|
data/lib/pact/doc/generator.rb
CHANGED
@@ -18,7 +18,7 @@ module Pact
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def call
|
21
|
-
|
21
|
+
ensure_target_dir_exists_and_is_clean
|
22
22
|
write_index if consumer_contracts.any?
|
23
23
|
write_doc_files
|
24
24
|
perform_after_hook
|
@@ -68,7 +68,8 @@ module Pact
|
|
68
68
|
after.call(pact_dir, target_dir, consumer_contracts)
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def ensure_target_dir_exists_and_is_clean
|
72
|
+
FileUtils.rm_rf target_dir
|
72
73
|
FileUtils.mkdir_p target_dir
|
73
74
|
end
|
74
75
|
|
data/lib/pact/reification.rb
CHANGED
data/lib/pact/shared/request.rb
CHANGED
@@ -41,20 +41,11 @@ module Pact
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def method_and_path
|
44
|
-
"#{method.upcase} #{
|
44
|
+
"#{method.upcase} #{display_path}"
|
45
45
|
end
|
46
46
|
|
47
47
|
def full_path
|
48
|
-
|
49
|
-
if path.empty?
|
50
|
-
fp << "/"
|
51
|
-
else
|
52
|
-
fp << path
|
53
|
-
end
|
54
|
-
if query && !query.empty?
|
55
|
-
fp << ("?" + (query.kind_of?(Pact::Term) ? query.generate : query))
|
56
|
-
end
|
57
|
-
fp
|
48
|
+
display_path + display_query
|
58
49
|
end
|
59
50
|
|
60
51
|
protected
|
@@ -67,6 +58,14 @@ module Pact
|
|
67
58
|
keep_keys = [:method, :path, :headers, :query]
|
68
59
|
as_json.reject{ |key, value| !keep_keys.include? key }
|
69
60
|
end
|
61
|
+
|
62
|
+
def display_path
|
63
|
+
path.empty? ? "/" : path
|
64
|
+
end
|
65
|
+
|
66
|
+
def display_query
|
67
|
+
(query.nil? || query.empty?) ? '' : "?#{Pact::Reification.from_term(query)}"
|
68
|
+
end
|
70
69
|
end
|
71
70
|
end
|
72
71
|
end
|
data/lib/pact/version.rb
CHANGED
@@ -25,6 +25,37 @@ describe Pact do
|
|
25
25
|
describe Pact::Configuration do
|
26
26
|
let(:configuration) { Pact::Configuration.new }
|
27
27
|
|
28
|
+
describe "log_dir" do
|
29
|
+
it "sets the location of the logs" do
|
30
|
+
expect(Logger).to receive(:new).with("./tmp/logs/pact.log").and_call_original
|
31
|
+
Pact.configure do | config |
|
32
|
+
config.log_dir = "./tmp/logs"
|
33
|
+
end
|
34
|
+
Pact.configuration.logger
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "logger" do
|
39
|
+
it "sets the location of the logs to log_dir by default" do
|
40
|
+
expect(Logger).to receive(:new).with(File.expand_path("./log/pact.log")).and_call_original
|
41
|
+
Pact.configuration.logger
|
42
|
+
end
|
43
|
+
it "defaults to DEBUG" do
|
44
|
+
expect(Pact.configuration.logger.level).to eq Logger::DEBUG
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "doc_dir" do
|
49
|
+
it "defaults to ./doc/pacts" do
|
50
|
+
expect(Pact.configuration.doc_dir).to eq File.expand_path("./doc/pacts")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "can be changed" do
|
54
|
+
Pact.configuration.doc_dir = "newdir"
|
55
|
+
expect(Pact.configuration.doc_dir).to eq "newdir"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
28
59
|
describe "doc_generator" do
|
29
60
|
|
30
61
|
context "with a symbol" do
|
@@ -34,6 +34,22 @@ module Pact
|
|
34
34
|
|
35
35
|
subject { Generator.new(pact_dir, doc_dir, options) }
|
36
36
|
|
37
|
+
context "when there are existing files" do
|
38
|
+
let(:existing_doc_file_path) { File.join(doc_dir, doc_type, "leftover") }
|
39
|
+
|
40
|
+
before do
|
41
|
+
FileUtils.mkdir_p File.dirname(existing_doc_file_path)
|
42
|
+
FileUtils.touch existing_doc_file_path
|
43
|
+
end
|
44
|
+
|
45
|
+
it "clears the existing files" do
|
46
|
+
expect(File.exist?(existing_doc_file_path)).to be_true
|
47
|
+
subject.call
|
48
|
+
expect(File.exist?(existing_doc_file_path)).to be_false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
37
53
|
it "creates an index" do
|
38
54
|
expect(index_renderer).to receive(:call).with("Some Consumer", {"Some Provider"=>"Some Consumer - Some Provider.md"})
|
39
55
|
subject.call
|
@@ -63,7 +79,6 @@ module Pact
|
|
63
79
|
|
64
80
|
end
|
65
81
|
|
66
|
-
|
67
82
|
end
|
68
83
|
end
|
69
84
|
end
|
@@ -64,6 +64,16 @@ module Pact
|
|
64
64
|
expect(subject.request).to_not include("headers")
|
65
65
|
end
|
66
66
|
end
|
67
|
+
|
68
|
+
context "when a Pact::Term is present" do
|
69
|
+
let(:consumer_contract) { Pact::ConsumerContract.from_uri './spec/support/interaction_view_model_with_terms.json'}
|
70
|
+
let(:interaction) { consumer_contract.interactions.first }
|
71
|
+
|
72
|
+
it "uses the generated value" do
|
73
|
+
expect(subject.request).to_not include("Term")
|
74
|
+
expect(subject.request).to include("sunny")
|
75
|
+
end
|
76
|
+
end
|
67
77
|
end
|
68
78
|
|
69
79
|
describe "response" do
|
@@ -104,6 +114,16 @@ module Pact
|
|
104
114
|
expect(subject.response).to_not include("headers")
|
105
115
|
end
|
106
116
|
end
|
117
|
+
|
118
|
+
context "when a Pact::Term is present" do
|
119
|
+
let(:consumer_contract) { Pact::ConsumerContract.from_uri './spec/support/interaction_view_model_with_terms.json'}
|
120
|
+
let(:interaction) { consumer_contract.interactions.first }
|
121
|
+
|
122
|
+
it "uses the generated value" do
|
123
|
+
expect(subject.response).to_not include("Term")
|
124
|
+
expect(subject.response).to include("rainy")
|
125
|
+
end
|
126
|
+
end
|
107
127
|
end
|
108
128
|
|
109
129
|
|
@@ -39,5 +39,17 @@ module Pact
|
|
39
39
|
|
40
40
|
end
|
41
41
|
|
42
|
+
context "when reifying a Request" do
|
43
|
+
|
44
|
+
let(:request){ Pact::Request::Expected.from_hash(method: 'get', path: '/', body: Pact::Term.new(generate: "sunny", matcher: /sun/))}
|
45
|
+
|
46
|
+
subject { Reification.from_term(request) }
|
47
|
+
|
48
|
+
it "turns it into a hash before reifying it" do
|
49
|
+
expect(subject[:body]).to eq("sunny")
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
42
54
|
end
|
43
55
|
end
|
@@ -23,6 +23,57 @@ module Pact
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe "#full_path" do
|
27
|
+
|
28
|
+
subject { TestRequest.new("get", "/something", {}, {some: "things"} , query).full_path }
|
29
|
+
|
30
|
+
context "with a query that is a Pact::Term" do
|
31
|
+
let(:query) { Pact::Term.new(generate: "some=things", matcher: /some/) }
|
32
|
+
it "reifies and appends the query" do
|
33
|
+
expect(subject).to eq("/something?some=things")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "with a query that is a string" do
|
38
|
+
let(:query) { "some=things" }
|
39
|
+
it "appends the query" do
|
40
|
+
expect(subject).to eq("/something?some=things")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with an empty query" do
|
45
|
+
let(:query) { "" }
|
46
|
+
it "does include a query" do
|
47
|
+
expect(subject).to eq("/something")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "with a nil query" do
|
52
|
+
let(:query) { nil }
|
53
|
+
it "does not include a query" do
|
54
|
+
expect(subject).to eq("/something")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#method_and_path" do
|
60
|
+
context "with an empty path" do
|
61
|
+
subject { TestRequest.new("get", "", {}, {} , "").method_and_path }
|
62
|
+
|
63
|
+
it "includes a slash" do
|
64
|
+
expect(subject).to eq("GET /")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with a path" do
|
69
|
+
subject { TestRequest.new("get", "/something", {}, {} , "").method_and_path }
|
70
|
+
|
71
|
+
it "includes the path" do
|
72
|
+
expect(subject).to eq("GET /something")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
26
77
|
end
|
27
78
|
end
|
28
79
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
{
|
2
|
+
"provider": {
|
3
|
+
"name": "a provider"
|
4
|
+
},
|
5
|
+
"consumer": {
|
6
|
+
"name": "a consumer"
|
7
|
+
},
|
8
|
+
"interactions": [
|
9
|
+
{
|
10
|
+
"description": "an interaction with terms",
|
11
|
+
"request": {
|
12
|
+
"method": "post",
|
13
|
+
"path": "/path",
|
14
|
+
"query": "some=thing",
|
15
|
+
"headers": {
|
16
|
+
"key": "a header"
|
17
|
+
},
|
18
|
+
"body": {
|
19
|
+
"term": {
|
20
|
+
"json_class": "Pact::Term",
|
21
|
+
"data": {
|
22
|
+
"generate": "sunny",
|
23
|
+
"matcher": {
|
24
|
+
"json_class": "Regexp",
|
25
|
+
"o": 0,
|
26
|
+
"s": "sun"
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
},
|
32
|
+
"response": {
|
33
|
+
"status": 200,
|
34
|
+
"body": {
|
35
|
+
"term": {
|
36
|
+
"json_class": "Pact::Term",
|
37
|
+
"data": {
|
38
|
+
"generate": "rainy",
|
39
|
+
"matcher": {
|
40
|
+
"json_class": "Regexp",
|
41
|
+
"o": 0,
|
42
|
+
"s": "rain"
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
]
|
50
|
+
}
|
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.1.0.
|
4
|
+
version: 1.1.0.rc4
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2014-
|
16
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: randexp
|
@@ -322,8 +322,8 @@ files:
|
|
322
322
|
- example/zoo-app/Gemfile
|
323
323
|
- example/zoo-app/Gemfile.lock
|
324
324
|
- example/zoo-app/Rakefile
|
325
|
-
- example/zoo-app/doc/markdown/README.md
|
326
|
-
- example/zoo-app/doc/markdown/Zoo App - Animal Service.md
|
325
|
+
- example/zoo-app/doc/pacts/markdown/README.md
|
326
|
+
- example/zoo-app/doc/pacts/markdown/Zoo App - Animal Service.md
|
327
327
|
- example/zoo-app/lib/zoo_app/animal_service_client.rb
|
328
328
|
- example/zoo-app/lib/zoo_app/models/alligator.rb
|
329
329
|
- example/zoo-app/spec/pacts/zoo_app-animal_service.json
|
@@ -518,6 +518,7 @@ files:
|
|
518
518
|
- spec/support/generated_index.md
|
519
519
|
- spec/support/generated_markdown.md
|
520
520
|
- spec/support/interaction_view_model.json
|
521
|
+
- spec/support/interaction_view_model_with_terms.json
|
521
522
|
- spec/support/markdown_pact.json
|
522
523
|
- spec/support/missing_provider_states_output.txt
|
523
524
|
- spec/support/pact_helper.rb
|
@@ -544,9 +545,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
544
545
|
- - ! '>='
|
545
546
|
- !ruby/object:Gem::Version
|
546
547
|
version: '0'
|
547
|
-
segments:
|
548
|
-
- 0
|
549
|
-
hash: -2322515558717640410
|
550
548
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
551
549
|
none: false
|
552
550
|
requirements:
|
@@ -638,6 +636,7 @@ test_files:
|
|
638
636
|
- spec/support/generated_index.md
|
639
637
|
- spec/support/generated_markdown.md
|
640
638
|
- spec/support/interaction_view_model.json
|
639
|
+
- spec/support/interaction_view_model_with_terms.json
|
641
640
|
- spec/support/markdown_pact.json
|
642
641
|
- spec/support/missing_provider_states_output.txt
|
643
642
|
- spec/support/pact_helper.rb
|