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
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/hal_client_methods'
|
2
|
-
require 'pact_broker/client/error'
|
3
|
-
require 'pact_broker/client/command_result'
|
4
|
-
|
5
|
-
# TODO
|
6
|
-
# --limit 1
|
7
|
-
# order by date so that the oldest one gets undeployed first
|
8
|
-
|
9
|
-
module PactBroker
|
10
|
-
module Client
|
11
|
-
class Versions
|
12
|
-
class RecordUndeployment
|
13
|
-
include PactBroker::Client::HalClientMethods
|
14
|
-
|
15
|
-
NOT_SUPPORTED_MESSAGE = "This version of the Pact Broker does not support recording undeployments. Please upgrade to version 2.80.0 or later."
|
16
|
-
|
17
|
-
def self.call(params, pact_broker_base_url, pact_broker_client_options)
|
18
|
-
new(params, pact_broker_base_url, pact_broker_client_options).call
|
19
|
-
end
|
20
|
-
|
21
|
-
def initialize(params, pact_broker_base_url, pact_broker_client_options)
|
22
|
-
@pact_broker_base_url = pact_broker_base_url
|
23
|
-
@pacticipant_name = params.fetch(:pacticipant_name)
|
24
|
-
@version_number = params.fetch(:version_number)
|
25
|
-
@environment_name = params.fetch(:environment_name)
|
26
|
-
@output = params.fetch(:output)
|
27
|
-
@pact_broker_client_options = pact_broker_client_options
|
28
|
-
end
|
29
|
-
|
30
|
-
def call
|
31
|
-
check_if_command_supported
|
32
|
-
if deployed_version_links_for_environment.any?
|
33
|
-
@undeployment_entities = deployed_version_links_for_environment.collect do | deployed_version_link |
|
34
|
-
deployed_version_link.get!._link!("pb:record-undeployment").post!
|
35
|
-
end
|
36
|
-
else
|
37
|
-
check_environment_exists
|
38
|
-
raise_not_found_error
|
39
|
-
end
|
40
|
-
|
41
|
-
PactBroker::Client::CommandResult.new(true, "foo")
|
42
|
-
rescue PactBroker::Client::Error => e
|
43
|
-
PactBroker::Client::CommandResult.new(false, e.message)
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
attr_reader :pact_broker_base_url, :pact_broker_client_options
|
49
|
-
attr_reader :pacticipant_name, :version_number, :environment_name, :target, :output
|
50
|
-
attr_reader :deployed_version_resource, :undeployment_entities
|
51
|
-
|
52
|
-
def version_resource
|
53
|
-
index_resource._link!("pb:pacticipant-version").expand(pacticipant: pacticipant_name, version: version_number).get!
|
54
|
-
end
|
55
|
-
|
56
|
-
def deployed_version_links
|
57
|
-
@deployed_version_links ||= version_resource._links!("pb:currently-deployed-versions")
|
58
|
-
end
|
59
|
-
|
60
|
-
def deployed_version_links_for_environment
|
61
|
-
@deployed_version_links_for_environment ||= deployed_version_links.select(environment_name)
|
62
|
-
end
|
63
|
-
|
64
|
-
def check_environment_exists
|
65
|
-
index_resource
|
66
|
-
._link!("pb:environments")
|
67
|
-
.get!
|
68
|
-
._links("pb:environments")
|
69
|
-
.find!(environment_name, "No environment found with name '#{environment_name}'")
|
70
|
-
end
|
71
|
-
|
72
|
-
def raise_not_found_error
|
73
|
-
raise PactBroker::Client::Error.new(deployed_version_not_found_message)
|
74
|
-
end
|
75
|
-
|
76
|
-
def deployed_version_not_found_message
|
77
|
-
if (env_names = deployed_version_links.names).any?
|
78
|
-
"#{pacticipant_name} version #{version_number} is not currently deployed to #{environment_name}. It is currently deployed to: #{env_names.join(", ")}"
|
79
|
-
else
|
80
|
-
"#{pacticipant_name} version #{version_number} is not currently deployed to any environment."
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def result_message
|
85
|
-
if output == "text"
|
86
|
-
message = "Recorded undeployment of #{pacticipant_name} version #{version_number} from #{environment_name} in #{pact_broker_name}."
|
87
|
-
elsif output == "json"
|
88
|
-
undeployment_entities.last.response.raw_body
|
89
|
-
else
|
90
|
-
""
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def check_if_command_supported
|
95
|
-
unless index_resource.can?("pb:environments")
|
96
|
-
raise PactBroker::Client::Error.new(NOT_SUPPORTED_MESSAGE)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/versions/record_deployment'
|
2
|
-
|
3
|
-
module PactBroker
|
4
|
-
module Client
|
5
|
-
class Versions
|
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
|
-
}
|
13
|
-
end
|
14
|
-
let!(:index_request) do
|
15
|
-
stub_request(:get, broker_base_url).to_return(status: 200, body: index_body_hash.to_json, headers: { "Content-Type" => "application/hal+json" } )
|
16
|
-
end
|
17
|
-
|
18
|
-
let(:target) { "blue" }
|
19
|
-
|
20
|
-
let(:params) do
|
21
|
-
{
|
22
|
-
pacticipant_name: "Foo",
|
23
|
-
version_number: "1",
|
24
|
-
environment_name: "test",
|
25
|
-
target: target
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
let(:options) do
|
30
|
-
{
|
31
|
-
output: "text"
|
32
|
-
}
|
33
|
-
end
|
34
|
-
let(:pact_broker_client_options) { { pact_broker_base_url: broker_base_url} }
|
35
|
-
|
36
|
-
subject { RecordDeployment.call(params, options, pact_broker_client_options) }
|
37
|
-
|
38
|
-
context "when the pb:environments relation does not exist" do
|
39
|
-
it "returns an error response" do
|
40
|
-
expect(subject.success).to be false
|
41
|
-
expect(subject.message).to include "does not support"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context "when the response headers contain Pactflow" do
|
46
|
-
before do
|
47
|
-
allow_any_instance_of(RecordDeployment).to receive(:check_if_command_supported)
|
48
|
-
allow_any_instance_of(RecordDeployment).to receive(:check_environment_exists)
|
49
|
-
allow_any_instance_of(RecordDeployment).to receive(:record_deployment)
|
50
|
-
allow_any_instance_of(RecordDeployment).to receive(:index_resource).and_return(index_resource)
|
51
|
-
end
|
52
|
-
|
53
|
-
let(:response_headers) { { "X-Pactflow-Sha" => "abc" } }
|
54
|
-
|
55
|
-
let(:index_resource) do
|
56
|
-
double('PactBroker::Client::Hal::Entity', response: double('response', headers: response_headers) )
|
57
|
-
end
|
58
|
-
|
59
|
-
it "indicates the API was Pactflow" do
|
60
|
-
expect(subject.message).to include "Recorded deployment of Foo version 1 to test environment (target blue) in Pactflow"
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when target is nil" do
|
64
|
-
let(:target) { nil }
|
65
|
-
|
66
|
-
it "does not include the target in the result message" do
|
67
|
-
expect(subject.message).to include "Recorded deployment of Foo version 1 to test environment in"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|