pact_broker-client 1.43.0 → 1.44.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +21 -0
- data/CHANGELOG.md +13 -0
- data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +0 -281
- data/lib/pact_broker/client/cli/broker.rb +3 -55
- data/lib/pact_broker/client/cli/deployment_commands.rb +74 -0
- data/lib/pact_broker/client/cli/pacticipant_commands.rb +9 -0
- data/lib/pact_broker/client/deployments.rb +4 -0
- data/lib/pact_broker/client/deployments/record_deployment.rb +38 -0
- data/lib/pact_broker/client/deployments/record_release.rb +99 -0
- data/lib/pact_broker/client/deployments/record_undeployment.rb +120 -0
- data/lib/pact_broker/client/describe_text_formatter.rb +23 -0
- data/lib/pact_broker/client/environments.rb +6 -3
- data/lib/pact_broker/client/environments/describe_environment.rb +3 -13
- data/lib/pact_broker/client/hal/entity.rb +5 -2
- data/lib/pact_broker/client/hal/http_client.rb +3 -2
- data/lib/pact_broker/client/pacticipants.rb +3 -3
- data/lib/pact_broker/client/pacticipants/create.rb +1 -1
- data/lib/pact_broker/client/pacticipants/describe.rb +33 -0
- data/lib/pact_broker/client/version.rb +1 -1
- data/lib/pact_broker/client/versions.rb +4 -1
- data/lib/pact_broker/client/versions/describe.rb +3 -1
- data/lib/pact_broker/client/versions/formatter.rb +3 -1
- data/lib/pact_broker/client/versions/json_formatter.rb +5 -3
- data/lib/pact_broker/client/versions/text_formatter.rb +3 -1
- data/script/record-deployments-and-releases.sh +10 -0
- data/spec/fixtures/approvals/describe_pacticipant.approved.txt +2 -0
- data/spec/integration/describe_environment_spec.rb +31 -0
- data/spec/lib/pact_broker/client/deployments/record_deployment_spec.rb +204 -0
- data/spec/pacts/pact_broker_client-pact_broker.json +0 -288
- data/spec/service_providers/publish_pacts_spec.rb +3 -1
- data/spec/service_providers/record_deployment_spec.rb +7 -29
- data/spec/service_providers/record_release_spec.rb +135 -0
- data/spec/spec_helper.rb +13 -2
- data/tasks/pact.rake +19 -1
- metadata +18 -6
- data/lib/pact_broker/client/versions/record_deployment.rb +0 -85
- data/lib/pact_broker/client/versions/record_undeployment.rb +0 -102
- data/spec/lib/pact_broker/client/versions/record_deployment_spec.rb +0 -75
@@ -18,7 +18,7 @@ module PactBroker
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get href, params = {}, headers = {}
|
21
|
-
query = params.collect{ |(key, value)| "#{CGI::escape(key.to_s)}=#{CGI::escape(value)}" }.join("&")
|
21
|
+
query = params.collect{ |(key, value)| "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}" }.join("&")
|
22
22
|
uri = URI(href)
|
23
23
|
uri.query = query
|
24
24
|
perform_request(create_request(uri, 'Get', nil, headers), uri)
|
@@ -46,7 +46,8 @@ module PactBroker
|
|
46
46
|
|
47
47
|
def create_request uri, http_method, body = nil, headers = {}
|
48
48
|
request = Net::HTTP.const_get(http_method).new(uri.request_uri)
|
49
|
-
request['Content-Type']
|
49
|
+
request['Content-Type'] ||= "application/json" if ['Post', 'Put'].include?(http_method)
|
50
|
+
request['Content-Type'] ||= "application/merge-patch+json" if ['Patch'].include?(http_method)
|
50
51
|
request['Accept'] = "application/hal+json"
|
51
52
|
headers.each do | key, value |
|
52
53
|
request[key] = value
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# New code
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
require 'pact_broker/client/pacticipants/create'
|
3
|
+
require 'pact_broker/client/pacticipants/describe'
|
4
|
+
require 'pact_broker/client/pacticipants/list'
|
5
5
|
|
6
6
|
# Old code
|
7
7
|
require 'pact_broker/client/base_client'
|
@@ -17,7 +17,7 @@ module PactBroker
|
|
17
17
|
index_resource._link!('pb:pacticipants').post!(pacticipant_resource_params)
|
18
18
|
elsif pacticipant_entity.success?
|
19
19
|
@action = "updated"
|
20
|
-
pacticipant_entity._link!('self').patch!(pacticipant_resource_params)
|
20
|
+
pacticipant_entity._link!('self').patch!(pacticipant_resource_params, { "Content-Type" => "application/json" })
|
21
21
|
else
|
22
22
|
pacticipant_entity.assert_success!
|
23
23
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'pact_broker/client/base_command'
|
2
|
+
require 'pact_broker/client/describe_text_formatter'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Client
|
6
|
+
module Pacticipants2
|
7
|
+
class Describe < PactBroker::Client::BaseCommand
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def do_call
|
12
|
+
PactBroker::Client::CommandResult.new(true, result_message)
|
13
|
+
end
|
14
|
+
|
15
|
+
def pacticipant_entity
|
16
|
+
@pacticipant_entity ||= index_resource._link('pb:pacticipant').expand('pacticipant' => params[:name]).get!
|
17
|
+
end
|
18
|
+
|
19
|
+
def result_message
|
20
|
+
if json_output?
|
21
|
+
pacticipant_entity.response.raw_body
|
22
|
+
else
|
23
|
+
properties = pacticipant_entity.response.body.except("_links", "_embedded")
|
24
|
+
if pacticipant_entity._embedded && pacticipant_entity._embedded["labels"] && pacticipant_entity._embedded["labels"].any?
|
25
|
+
properties["labels"] = pacticipant_entity._embedded["labels"]
|
26
|
+
end
|
27
|
+
PactBroker::Client::DescribeTextFormatter.call(properties)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# Need Versions class to extend BaseClient until we can remove the old Versions code
|
2
|
+
require 'pact_broker/client/base_client'
|
1
3
|
require 'pact_broker/client/pact_broker_client'
|
2
4
|
require 'pact_broker/client/versions/formatter'
|
3
5
|
|
4
6
|
module PactBroker
|
5
7
|
module Client
|
6
|
-
class Versions
|
8
|
+
class Versions < BaseClient
|
7
9
|
class Describe
|
8
10
|
|
9
11
|
class Result
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# Need Versions class to extend BaseClient until we can remove the old Versions code
|
2
|
+
require 'pact_broker/client/base_client'
|
1
3
|
require 'pact_broker/client/versions/json_formatter'
|
2
4
|
require 'pact_broker/client/versions/text_formatter'
|
3
5
|
|
4
6
|
module PactBroker
|
5
7
|
module Client
|
6
|
-
class Versions
|
8
|
+
class Versions < BaseClient
|
7
9
|
class Formatter
|
8
10
|
def self.call(matrix_lines, format)
|
9
11
|
formatter = case format
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# Need Versions class to extend BaseClient until we can remove the old Versions code
|
2
|
+
require 'pact_broker/client/base_client'
|
1
3
|
require 'table_print'
|
2
4
|
|
3
5
|
module PactBroker
|
4
6
|
module Client
|
5
|
-
class Versions
|
7
|
+
class Versions < BaseClient
|
6
8
|
class JsonFormatter
|
7
|
-
def self.call(
|
8
|
-
JSON.pretty_generate(
|
9
|
+
def self.call(version)
|
10
|
+
JSON.pretty_generate(version)
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# Need Versions class to extend BaseClient until we can remove the old Versions code
|
2
|
+
require 'pact_broker/client/base_client'
|
1
3
|
require 'table_print'
|
2
4
|
|
3
5
|
module PactBroker
|
4
6
|
module Client
|
5
|
-
class Versions
|
7
|
+
class Versions < BaseClient
|
6
8
|
class TextFormatter
|
7
9
|
|
8
10
|
Line = Struct.new(:number, :tags)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
export PACT_BROKER_FEATURES=deployments
|
2
|
+
|
3
|
+
bundle exec bin/pact-broker create-or-update-pacticipant --name Foo
|
4
|
+
bundle exec bin/pact-broker create-version-tag --pacticipant Foo --version 2 --tag main --auto-create-version
|
5
|
+
bundle exec bin/pact-broker describe-version --pacticipant Foo --version 2
|
6
|
+
bundle exec bin/pact-broker create-environment --name test
|
7
|
+
bundle exec bin/pact-broker can-i-deploy --pacticipant Foo --version 2 --to-environment test
|
8
|
+
bundle exec bin/pact-broker record-deployment --pacticipant Foo --version 2 --environment test --target foo
|
9
|
+
bundle exec bin/pact-broker record-undeployment --pacticipant Foo --version 2 --environment test --target foo
|
10
|
+
bundle exec bin/pact-broker record-release --pacticipant Foo --version 2 --environment test
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'pact_broker/client/cli/broker'
|
2
|
+
|
3
|
+
RSpec.describe "describe-environment" do
|
4
|
+
let(:index_body_hash) do
|
5
|
+
{
|
6
|
+
_links: {
|
7
|
+
"pb:pacticipant" => {
|
8
|
+
href: "http://broker/pacticipants/{pacticipant}"
|
9
|
+
}
|
10
|
+
}
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:pacticipant_body_hash) { JSON.parse(File.read("./spec/support/pacticipant_get.json")) }
|
15
|
+
|
16
|
+
let!(:index_request) do
|
17
|
+
stub_request(:get, "http://broker").to_return(status: 200, body: index_body_hash.to_json, headers: { "Content-Type" => "application/hal+json" } )
|
18
|
+
end
|
19
|
+
|
20
|
+
let!(:pacticipant_request) do
|
21
|
+
stub_request(:get, "http://broker/pacticipants/Foo").to_return(status: 200, body: pacticipant_body_hash.to_json, headers: { "Content-Type" => "application/hal+json" } )
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:parameters) { %w{describe-pacticipant --name Foo --broker-base-url http://broker} }
|
25
|
+
|
26
|
+
subject { capture(:stdout) { PactBroker::Client::CLI::Broker.start(parameters) } }
|
27
|
+
|
28
|
+
it "prints the pacticipant properties" do
|
29
|
+
Approvals.verify(subject, :name => "describe_pacticipant", format: :txt)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
require 'pact_broker/client/deployments/record_deployment'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Client
|
5
|
+
module Deployments
|
6
|
+
describe RecordDeployment do
|
7
|
+
describe ".call" do
|
8
|
+
let(:broker_base_url) { "http://broker" }
|
9
|
+
let(:index_body_hash) do
|
10
|
+
{
|
11
|
+
_links: {
|
12
|
+
"pb:environments" => { href: "#{broker_base_url}/environments" },
|
13
|
+
"pb:pacticipant-version" => {
|
14
|
+
href: "#{broker_base_url}/pacticipants/{pacticipant}/versions/{version}"
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
let(:version_body_hash) do
|
20
|
+
{
|
21
|
+
"_links" => {
|
22
|
+
"pb:record-deployment" => [
|
23
|
+
{
|
24
|
+
name: "test",
|
25
|
+
href: "#{broker_base_url}/record-deployment"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
let(:environments_body_hash) do
|
32
|
+
{
|
33
|
+
"_links" => {
|
34
|
+
"pb:environments" => [
|
35
|
+
{
|
36
|
+
"name" => "test",
|
37
|
+
"href" => ""
|
38
|
+
}
|
39
|
+
]
|
40
|
+
}
|
41
|
+
|
42
|
+
}
|
43
|
+
end
|
44
|
+
let(:record_deployment_body_hash) do
|
45
|
+
{ "some" => "response" }
|
46
|
+
end
|
47
|
+
let!(:index_request) do
|
48
|
+
stub_request(:get, broker_base_url).to_return(status: 200, body: index_body_hash.to_json, headers: { "Content-Type" => "application/hal+json" } )
|
49
|
+
end
|
50
|
+
let!(:version_request) do
|
51
|
+
stub_request(:get, broker_base_url + "/pacticipants/Foo/versions/1").to_return(status: 200, body: version_body_hash.to_json, headers: { "Content-Type" => "application/hal+json" } )
|
52
|
+
end
|
53
|
+
|
54
|
+
let!(:environments_request) do
|
55
|
+
stub_request(:get, "http://broker/environments").
|
56
|
+
with(headers: { 'Accept'=>'application/hal+json' }).
|
57
|
+
to_return(status: 200, body: environments_body_hash.to_json, headers: { "Content-Type" => "application/hal+json" })
|
58
|
+
end
|
59
|
+
let!(:record_deployment_request) do
|
60
|
+
stub_request(:post, "http://broker/record-deployment").
|
61
|
+
to_return(status: 200, body: record_deployment_body_hash.to_json , headers: {})
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:target) { "blue" }
|
65
|
+
|
66
|
+
let(:params) do
|
67
|
+
{
|
68
|
+
pacticipant_name: "Foo",
|
69
|
+
version_number: "1",
|
70
|
+
environment_name: "test",
|
71
|
+
target: target
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:options) do
|
76
|
+
{
|
77
|
+
output: output,
|
78
|
+
verbose: true
|
79
|
+
}
|
80
|
+
end
|
81
|
+
let(:output) { "text" }
|
82
|
+
let(:pact_broker_client_options) { { pact_broker_base_url: broker_base_url} }
|
83
|
+
|
84
|
+
subject { RecordDeployment.call(params, options, pact_broker_client_options) }
|
85
|
+
|
86
|
+
context "when the pb:environments relation does not exist" do
|
87
|
+
let(:index_body_hash) do
|
88
|
+
{
|
89
|
+
"_links" => {}
|
90
|
+
}
|
91
|
+
end
|
92
|
+
it "returns an error response" do
|
93
|
+
expect(subject.success).to be false
|
94
|
+
expect(subject.message).to include "does not support"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when the specified version does not exist" do
|
99
|
+
let!(:version_request) do
|
100
|
+
stub_request(:get, broker_base_url + "/pacticipants/Foo/versions/1").to_return(status: 404)
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns an error response" do
|
104
|
+
expect(subject.success).to be false
|
105
|
+
expect(subject.message).to include "Foo version 1 not found"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "when the pacticipant version does not support recording deployments" do
|
110
|
+
let(:version_body_hash) do
|
111
|
+
{
|
112
|
+
"_links" => {}
|
113
|
+
}
|
114
|
+
end
|
115
|
+
it "returns an error response" do
|
116
|
+
expect(subject.success).to be false
|
117
|
+
expect(subject.message).to include "does not support"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "when the specified environment is not available for recording a deployment" do
|
122
|
+
let(:version_body_hash) do
|
123
|
+
{
|
124
|
+
"_links" => {
|
125
|
+
"pb:record-deployment" => [
|
126
|
+
{
|
127
|
+
"name" => "prod",
|
128
|
+
"href" => ""
|
129
|
+
}
|
130
|
+
]
|
131
|
+
}
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
135
|
+
context "when the environment does not exist" do
|
136
|
+
let(:environments_body_hash) do
|
137
|
+
{
|
138
|
+
"_links" => {
|
139
|
+
"pb:environments" => [
|
140
|
+
{
|
141
|
+
"name" => "prod",
|
142
|
+
"href" => ""
|
143
|
+
},{
|
144
|
+
"name" => "uat",
|
145
|
+
"href" => ""
|
146
|
+
}
|
147
|
+
]
|
148
|
+
}
|
149
|
+
}
|
150
|
+
end
|
151
|
+
|
152
|
+
it "returns an error response" do
|
153
|
+
expect(subject.success).to be false
|
154
|
+
expect(subject.message).to include "No environment found with name 'test'. Available options: prod"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context "when the environment does exist" do
|
159
|
+
it "returns an error response" do
|
160
|
+
expect(subject.success).to be false
|
161
|
+
expect(subject.message).to include "Environment 'test' is not an available option for recording a deployment of Foo. Available options: prod"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context "when the output is json" do
|
167
|
+
let(:output) { "json" }
|
168
|
+
|
169
|
+
it "returns the JSON payload" do
|
170
|
+
expect(JSON.parse(subject.message)).to eq record_deployment_body_hash
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context "when the response headers contain Pactflow" do
|
175
|
+
before do
|
176
|
+
allow_any_instance_of(RecordDeployment).to receive(:check_if_command_supported)
|
177
|
+
allow_any_instance_of(RecordDeployment).to receive(:check_environment_exists)
|
178
|
+
allow_any_instance_of(RecordDeployment).to receive(:record_action)
|
179
|
+
allow_any_instance_of(RecordDeployment).to receive(:index_resource).and_return(index_resource)
|
180
|
+
end
|
181
|
+
|
182
|
+
let(:response_headers) { { "X-Pactflow-Sha" => "abc" } }
|
183
|
+
|
184
|
+
let(:index_resource) do
|
185
|
+
double('PactBroker::Client::Hal::Entity', response: double('response', headers: response_headers) )
|
186
|
+
end
|
187
|
+
|
188
|
+
it "indicates the API was Pactflow" do
|
189
|
+
expect(subject.message).to include "Recorded deployment of Foo version 1 to test environment (target blue) in Pactflow"
|
190
|
+
end
|
191
|
+
|
192
|
+
context "when target is nil" do
|
193
|
+
let(:target) { nil }
|
194
|
+
|
195
|
+
it "does not include the target in the result message" do
|
196
|
+
expect(subject.message).to include "Recorded deployment of Foo version 1 to test environment in"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
@@ -1638,294 +1638,6 @@
|
|
1638
1638
|
}
|
1639
1639
|
}
|
1640
1640
|
},
|
1641
|
-
{
|
1642
|
-
"description": "a request for the index resource",
|
1643
|
-
"providerState": "the pb:publish-contracts relations exists in the index resource",
|
1644
|
-
"request": {
|
1645
|
-
"method": "GET",
|
1646
|
-
"path": "/",
|
1647
|
-
"headers": {
|
1648
|
-
"Accept": "application/hal+json"
|
1649
|
-
}
|
1650
|
-
},
|
1651
|
-
"response": {
|
1652
|
-
"status": 200,
|
1653
|
-
"headers": {
|
1654
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1655
|
-
},
|
1656
|
-
"body": {
|
1657
|
-
"_links": {
|
1658
|
-
"pb:publish-contracts": {
|
1659
|
-
"href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PUBLISH-CONTRACTS"
|
1660
|
-
}
|
1661
|
-
}
|
1662
|
-
},
|
1663
|
-
"matchingRules": {
|
1664
|
-
"$.body._links.pb:publish-contracts.href": {
|
1665
|
-
"match": "regex",
|
1666
|
-
"regex": "http:\\/\\/.*"
|
1667
|
-
}
|
1668
|
-
}
|
1669
|
-
}
|
1670
|
-
},
|
1671
|
-
{
|
1672
|
-
"description": "a request to publish contracts",
|
1673
|
-
"request": {
|
1674
|
-
"method": "POST",
|
1675
|
-
"path": "/HAL-REL-PLACEHOLDER-PB-PUBLISH-CONTRACTS",
|
1676
|
-
"headers": {
|
1677
|
-
"Content-Type": "application/json",
|
1678
|
-
"Accept": "application/hal+json"
|
1679
|
-
},
|
1680
|
-
"body": {
|
1681
|
-
"pacticipantName": "Foo",
|
1682
|
-
"pacticipantVersionNumber": "5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
|
1683
|
-
"branch": "main",
|
1684
|
-
"tags": [
|
1685
|
-
"dev"
|
1686
|
-
],
|
1687
|
-
"buildUrl": "http://build",
|
1688
|
-
"contracts": [
|
1689
|
-
{
|
1690
|
-
"consumerName": "Foo",
|
1691
|
-
"providerName": "Bar",
|
1692
|
-
"specification": "pact",
|
1693
|
-
"contentType": "application/json",
|
1694
|
-
"content": "eyJjb25zdW1lciI6eyJuYW1lIjoiRm9vIn0sInByb3ZpZGVyIjp7Im5hbWUiOiJCYXIifSwiaW50ZXJhY3Rpb25zIjpbeyJkZXNjcmlwdGlvbiI6ImFuIGV4YW1wbGUgcmVxdWVzdCIsInByb3ZpZGVyU3RhdGUiOiJhIHByb3ZpZGVyIHN0YXRlIiwicmVxdWVzdCI6eyJtZXRob2QiOiJHRVQiLCJwYXRoIjoiLyIsImhlYWRlcnMiOnt9fSwicmVzcG9uc2UiOnsic3RhdHVzIjoyMDAsImhlYWRlcnMiOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vaGFsK2pzb24ifX19XSwibWV0YWRhdGEiOnsicGFjdFNwZWNpZmljYXRpb24iOnsidmVyc2lvbiI6IjIuMC4wIn19fQ==",
|
1695
|
-
"writeMode": "overwrite",
|
1696
|
-
"onConflict": "overwrite"
|
1697
|
-
}
|
1698
|
-
]
|
1699
|
-
}
|
1700
|
-
},
|
1701
|
-
"response": {
|
1702
|
-
"status": 200,
|
1703
|
-
"headers": {
|
1704
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1705
|
-
},
|
1706
|
-
"body": {
|
1707
|
-
"_embedded": {
|
1708
|
-
"pacticipant": {
|
1709
|
-
"name": "Foo"
|
1710
|
-
},
|
1711
|
-
"version": {
|
1712
|
-
"number": "5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
|
1713
|
-
"buildUrl": "http://build"
|
1714
|
-
}
|
1715
|
-
},
|
1716
|
-
"logs": [
|
1717
|
-
{
|
1718
|
-
"level": "info",
|
1719
|
-
"message": "some message"
|
1720
|
-
}
|
1721
|
-
],
|
1722
|
-
"_links": {
|
1723
|
-
"pb:pacticipant-version-tags": [
|
1724
|
-
{
|
1725
|
-
"name": "dev"
|
1726
|
-
}
|
1727
|
-
],
|
1728
|
-
"pb:contracts": [
|
1729
|
-
{
|
1730
|
-
"href": "http://some-pact"
|
1731
|
-
}
|
1732
|
-
]
|
1733
|
-
}
|
1734
|
-
},
|
1735
|
-
"matchingRules": {
|
1736
|
-
"$.body.logs": {
|
1737
|
-
"min": 1
|
1738
|
-
},
|
1739
|
-
"$.body.logs[*].*": {
|
1740
|
-
"match": "type"
|
1741
|
-
},
|
1742
|
-
"$.body._links.pb:contracts[0].href": {
|
1743
|
-
"match": "type"
|
1744
|
-
}
|
1745
|
-
}
|
1746
|
-
}
|
1747
|
-
},
|
1748
|
-
{
|
1749
|
-
"description": "a request for the index resource",
|
1750
|
-
"providerState": "the pb:pacticipant-version and pb:environments relations exist in the index resource",
|
1751
|
-
"request": {
|
1752
|
-
"method": "GET",
|
1753
|
-
"path": "/",
|
1754
|
-
"headers": {
|
1755
|
-
"Accept": "application/hal+json"
|
1756
|
-
}
|
1757
|
-
},
|
1758
|
-
"response": {
|
1759
|
-
"status": 200,
|
1760
|
-
"headers": {
|
1761
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1762
|
-
},
|
1763
|
-
"body": {
|
1764
|
-
"_links": {
|
1765
|
-
"pb:pacticipant-version": {
|
1766
|
-
"href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-{pacticipant}-{version}"
|
1767
|
-
},
|
1768
|
-
"pb:environments": {
|
1769
|
-
"href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-ENVIRONMENTS"
|
1770
|
-
}
|
1771
|
-
}
|
1772
|
-
},
|
1773
|
-
"matchingRules": {
|
1774
|
-
"$.body._links.pb:pacticipant-version.href": {
|
1775
|
-
"match": "regex",
|
1776
|
-
"regex": "http:\\/\\/.*{pacticipant}.*{version}"
|
1777
|
-
},
|
1778
|
-
"$.body._links.pb:environments.href": {
|
1779
|
-
"match": "regex",
|
1780
|
-
"regex": "http:\\/\\/.*"
|
1781
|
-
}
|
1782
|
-
}
|
1783
|
-
}
|
1784
|
-
},
|
1785
|
-
{
|
1786
|
-
"description": "a request for a pacticipant version",
|
1787
|
-
"providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo exists with a test environment available for deployment",
|
1788
|
-
"request": {
|
1789
|
-
"method": "GET",
|
1790
|
-
"path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-Foo-5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
|
1791
|
-
"headers": {
|
1792
|
-
"Accept": "application/hal+json"
|
1793
|
-
}
|
1794
|
-
},
|
1795
|
-
"response": {
|
1796
|
-
"status": 200,
|
1797
|
-
"headers": {
|
1798
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1799
|
-
},
|
1800
|
-
"body": {
|
1801
|
-
"_links": {
|
1802
|
-
"pb:record-deployment": [
|
1803
|
-
{
|
1804
|
-
"name": "test",
|
1805
|
-
"href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-RECORD-DEPLOYMENT-FOO-5556B8149BF8BAC76BC30F50A8A2DD4C22C85F30-TEST"
|
1806
|
-
}
|
1807
|
-
]
|
1808
|
-
}
|
1809
|
-
},
|
1810
|
-
"matchingRules": {
|
1811
|
-
"$.body._links.pb:record-deployment[0].href": {
|
1812
|
-
"match": "regex",
|
1813
|
-
"regex": "http:\\/\\/.*"
|
1814
|
-
}
|
1815
|
-
}
|
1816
|
-
}
|
1817
|
-
},
|
1818
|
-
{
|
1819
|
-
"description": "a request to record a deployment",
|
1820
|
-
"providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo exists with a test environment available for deployment",
|
1821
|
-
"request": {
|
1822
|
-
"method": "POST",
|
1823
|
-
"path": "/HAL-REL-PLACEHOLDER-PB-RECORD-DEPLOYMENT-FOO-5556B8149BF8BAC76BC30F50A8A2DD4C22C85F30-TEST",
|
1824
|
-
"headers": {
|
1825
|
-
"Content-Type": "application/json",
|
1826
|
-
"Accept": "application/hal+json"
|
1827
|
-
},
|
1828
|
-
"body": {
|
1829
|
-
"target": "blue"
|
1830
|
-
}
|
1831
|
-
},
|
1832
|
-
"response": {
|
1833
|
-
"status": 201,
|
1834
|
-
"headers": {
|
1835
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1836
|
-
},
|
1837
|
-
"body": {
|
1838
|
-
"target": "blue"
|
1839
|
-
}
|
1840
|
-
}
|
1841
|
-
},
|
1842
|
-
{
|
1843
|
-
"description": "a request for a pacticipant version",
|
1844
|
-
"providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo does not exist",
|
1845
|
-
"request": {
|
1846
|
-
"method": "GET",
|
1847
|
-
"path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-Foo-5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
|
1848
|
-
"headers": {
|
1849
|
-
"Accept": "application/hal+json"
|
1850
|
-
}
|
1851
|
-
},
|
1852
|
-
"response": {
|
1853
|
-
"status": 404,
|
1854
|
-
"headers": {
|
1855
|
-
}
|
1856
|
-
}
|
1857
|
-
},
|
1858
|
-
{
|
1859
|
-
"description": "a request for a pacticipant version",
|
1860
|
-
"providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo exists with 2 environments that aren't test available for deployment",
|
1861
|
-
"request": {
|
1862
|
-
"method": "GET",
|
1863
|
-
"path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-Foo-5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
|
1864
|
-
"headers": {
|
1865
|
-
"Accept": "application/hal+json"
|
1866
|
-
}
|
1867
|
-
},
|
1868
|
-
"response": {
|
1869
|
-
"status": 200,
|
1870
|
-
"headers": {
|
1871
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1872
|
-
},
|
1873
|
-
"body": {
|
1874
|
-
"_links": {
|
1875
|
-
"pb:record-deployment": [
|
1876
|
-
{
|
1877
|
-
"name": "prod",
|
1878
|
-
"href": "href"
|
1879
|
-
},
|
1880
|
-
{
|
1881
|
-
"name": "dev",
|
1882
|
-
"href": "href"
|
1883
|
-
}
|
1884
|
-
]
|
1885
|
-
}
|
1886
|
-
},
|
1887
|
-
"matchingRules": {
|
1888
|
-
"$.body._links.pb:record-deployment[0]": {
|
1889
|
-
"match": "type"
|
1890
|
-
},
|
1891
|
-
"$.body._links.pb:record-deployment[1]": {
|
1892
|
-
"match": "type"
|
1893
|
-
}
|
1894
|
-
}
|
1895
|
-
}
|
1896
|
-
},
|
1897
|
-
{
|
1898
|
-
"description": "a request for the environments",
|
1899
|
-
"providerState": "an environment with name test exists",
|
1900
|
-
"request": {
|
1901
|
-
"method": "GET",
|
1902
|
-
"path": "/HAL-REL-PLACEHOLDER-PB-ENVIRONMENTS",
|
1903
|
-
"headers": {
|
1904
|
-
"Accept": "application/hal+json"
|
1905
|
-
}
|
1906
|
-
},
|
1907
|
-
"response": {
|
1908
|
-
"status": 200,
|
1909
|
-
"headers": {
|
1910
|
-
"Content-Type": "application/hal+json;charset=utf-8"
|
1911
|
-
},
|
1912
|
-
"body": {
|
1913
|
-
"_links": {
|
1914
|
-
"pb:environments": [
|
1915
|
-
{
|
1916
|
-
"name": "test",
|
1917
|
-
"href": "href"
|
1918
|
-
}
|
1919
|
-
]
|
1920
|
-
}
|
1921
|
-
},
|
1922
|
-
"matchingRules": {
|
1923
|
-
"$.body._links.pb:environments[0].href": {
|
1924
|
-
"match": "type"
|
1925
|
-
}
|
1926
|
-
}
|
1927
|
-
}
|
1928
|
-
},
|
1929
1641
|
{
|
1930
1642
|
"description": "a request to create a webhook with a JSON body for a consumer and provider",
|
1931
1643
|
"providerState": "the 'Pricing Service' and 'Condor' already exist in the pact-broker",
|