pact_broker-client 1.75.3 → 1.75.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/pact_broker/client/version.rb +1 -1
- metadata +5 -216
- data/.github/workflows/test.yml +0 -59
- data/.rspec +0 -3
- data/lib/pact_broker/client/pacts/list_latest_versions.rb +0 -66
- data/lib/pact_broker/client/webhooks/test.rb +0 -16
- data/pact-broker-client.gemspec +0 -31
- data/spec/fixtures/MyConsumer-MyProvider (1).json +0 -37
- data/spec/fixtures/MyConsumer-MyProvider.json +0 -37
- data/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt +0 -7
- data/spec/fixtures/approvals/can_i_deploy_ignore.approved.txt +0 -13
- data/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt +0 -7
- data/spec/fixtures/approvals/describe_environment.approved.txt +0 -7
- data/spec/fixtures/approvals/describe_pacticipant.approved.txt +0 -2
- data/spec/fixtures/approvals/list_environments.approved.txt +0 -3
- data/spec/fixtures/approvals/publish_provider_contract.approved.txt +0 -2
- data/spec/fixtures/certificates/ca_cert.pem +0 -19
- data/spec/fixtures/certificates/ca_cert.srl +0 -1
- data/spec/fixtures/certificates/ca_key.pem +0 -28
- data/spec/fixtures/certificates/client_cert.pem +0 -17
- data/spec/fixtures/certificates/key.pem +0 -28
- data/spec/fixtures/certificates/server.csr +0 -15
- data/spec/fixtures/certificates/unsigned_cert.pem +0 -19
- data/spec/fixtures/certificates/unsigned_key.pem +0 -28
- data/spec/fixtures/foo-bar.json +0 -31
- data/spec/integration/can_i_deploy_spec.rb +0 -24
- data/spec/integration/can_i_merge_spec.rb +0 -44
- data/spec/integration/create_version_tag_spec.rb +0 -20
- data/spec/integration/describe_environment_spec.rb +0 -31
- data/spec/integration/publish_provider_contract_spec.rb +0 -53
- data/spec/integration/unknown_options_spec.rb +0 -39
- data/spec/lib/pact_broker/client/base_client_spec.rb +0 -182
- data/spec/lib/pact_broker/client/branches/delete_branch_spec.rb +0 -103
- data/spec/lib/pact_broker/client/can_i_deploy_spec.rb +0 -250
- data/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb +0 -196
- data/spec/lib/pact_broker/client/cli/broker_create_or_update_webhook_spec.rb +0 -23
- data/spec/lib/pact_broker/client/cli/broker_create_webhook_spec.rb +0 -23
- data/spec/lib/pact_broker/client/cli/broker_publish_spec.rb +0 -327
- data/spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb +0 -287
- data/spec/lib/pact_broker/client/cli/custom_thor_spec.rb +0 -174
- data/spec/lib/pact_broker/client/cli/version_selector_options_parser_spec.rb +0 -97
- data/spec/lib/pact_broker/client/deployments/record_deployment_spec.rb +0 -224
- data/spec/lib/pact_broker/client/deployments/record_support_ended_spec.rb +0 -208
- data/spec/lib/pact_broker/client/deployments/record_undeployment_spec.rb +0 -227
- data/spec/lib/pact_broker/client/environments/delete_environment_spec.rb +0 -120
- data/spec/lib/pact_broker/client/environments/describe_environment_spec.rb +0 -89
- data/spec/lib/pact_broker/client/environments/update_environment_spec.rb +0 -167
- data/spec/lib/pact_broker/client/generate_display_name_spec.rb +0 -39
- data/spec/lib/pact_broker/client/git_spec.rb +0 -159
- data/spec/lib/pact_broker/client/hal/authorization_header_redactor_spec.rb +0 -17
- data/spec/lib/pact_broker/client/hal/entity_spec.rb +0 -149
- data/spec/lib/pact_broker/client/hal/http_client_spec.rb +0 -238
- data/spec/lib/pact_broker/client/hal/link_spec.rb +0 -127
- data/spec/lib/pact_broker/client/matrix/abbreviate_version_number_spec.rb +0 -42
- data/spec/lib/pact_broker/client/matrix/resource_spec.rb +0 -70
- data/spec/lib/pact_broker/client/matrix/text_formatter_spec.rb +0 -63
- data/spec/lib/pact_broker/client/matrix_spec.rb +0 -17
- data/spec/lib/pact_broker/client/merge_pacts_spec.rb +0 -198
- data/spec/lib/pact_broker/client/pact_broker_client_spec.rb +0 -47
- data/spec/lib/pact_broker/client/pacticipants/create_spec.rb +0 -31
- data/spec/lib/pact_broker/client/pacticipants_spec.rb +0 -18
- data/spec/lib/pact_broker/client/publish_pacts_the_old_way_spec.rb +0 -272
- data/spec/lib/pact_broker/client/retry_spec.rb +0 -119
- data/spec/lib/pact_broker/client/tasks/publication_task_spec.rb +0 -231
- data/spec/lib/pact_broker/client/versions/create_spec.rb +0 -174
- data/spec/lib/pact_broker/client/versions/describe_spec.rb +0 -64
- data/spec/lib/pact_broker/client/versions_spec.rb +0 -34
- data/spec/lib/pact_broker/client/webhooks/create_spec.rb +0 -99
- data/spec/lib/pactflow/client/provider_contracts/publish_spec.rb +0 -179
- data/spec/pacts/pact_broker_client-pact_broker.json +0 -2969
- data/spec/pacts/pact_broker_client-pactflow.json +0 -288
- data/spec/readme_spec.rb +0 -16
- data/spec/service_providers/create_environment_spec.rb +0 -78
- data/spec/service_providers/delete_branch_spec.rb +0 -68
- data/spec/service_providers/extra_goodies_spec.rb +0 -108
- data/spec/service_providers/list_environments_spec.rb +0 -77
- data/spec/service_providers/list_latest_pact_versions_spec.rb.bak +0 -44
- data/spec/service_providers/pact_broker_client_matrix_ignore_spec.rb +0 -98
- data/spec/service_providers/pact_broker_client_matrix_spec.rb +0 -292
- data/spec/service_providers/pact_broker_client_pacticipant_version_spec.rb +0 -56
- data/spec/service_providers/pact_broker_client_publish_spec.rb +0 -135
- data/spec/service_providers/pact_broker_client_register_repository_spec.rb +0 -49
- data/spec/service_providers/pact_broker_client_retrieve_all_pacts_for_provider_spec.rb +0 -53
- data/spec/service_providers/pact_broker_client_retrieve_pact_spec.rb +0 -109
- data/spec/service_providers/pact_broker_client_tags_spec.rb +0 -101
- data/spec/service_providers/pact_broker_client_versions_spec.rb +0 -113
- data/spec/service_providers/pact_helper.rb +0 -136
- data/spec/service_providers/pactflow_publish_provider_contract_spec.rb +0 -137
- data/spec/service_providers/pactflow_publish_provider_contract_the_old_way_spec.rb +0 -129
- data/spec/service_providers/pactflow_webhooks_create_spec.rb +0 -86
- data/spec/service_providers/pacticipants_create_spec.rb +0 -119
- data/spec/service_providers/publish_pacts_spec.rb +0 -114
- data/spec/service_providers/record_deployment_spec.rb +0 -199
- data/spec/service_providers/record_release_spec.rb +0 -130
- data/spec/service_providers/record_undeployment_spec.rb +0 -164
- data/spec/service_providers/webhooks_create_spec.rb +0 -391
- data/spec/spec_helper.rb +0 -68
- data/spec/support/approvals.rb +0 -26
- data/spec/support/cli_test_pacts/bar.json +0 -0
- data/spec/support/cli_test_pacts/foo.json +0 -0
- data/spec/support/latest_pacts_for_provider.json +0 -15
- data/spec/support/matrix.json +0 -35
- data/spec/support/matrix.txt +0 -3
- data/spec/support/matrix_error.txt +0 -3
- data/spec/support/matrix_with_results.txt +0 -10
- data/spec/support/pacticipant_get.json +0 -18
- data/spec/support/pacticipants_list.json +0 -26
- data/spec/support/pacts_latest_list.json +0 -41
- data/spec/support/shared_context.rb +0 -25
- data/spec/support/ssl_server.rb +0 -42
@@ -1,238 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/hal/http_client'
|
2
|
-
require "faraday"
|
3
|
-
require "faraday/retry"
|
4
|
-
|
5
|
-
module PactBroker::Client
|
6
|
-
module Hal
|
7
|
-
describe HttpClient do
|
8
|
-
subject { HttpClient.new(username: 'foo', password: 'bar') }
|
9
|
-
|
10
|
-
describe "get" do
|
11
|
-
before do
|
12
|
-
allow(subject).to receive(:until_truthy_or_max_times) { |&block| block.call }
|
13
|
-
end
|
14
|
-
|
15
|
-
let!(:request) do
|
16
|
-
stub_request(:get, "http://example.org/").
|
17
|
-
with( headers: {
|
18
|
-
'Accept'=>'application/hal+json',
|
19
|
-
'Authorization'=>'Basic Zm9vOmJhcg=='
|
20
|
-
}).
|
21
|
-
to_return(status: 200, body: response_body, headers: {'Content-Type' => 'application/json'})
|
22
|
-
end
|
23
|
-
|
24
|
-
let(:response_body) { {some: 'json'}.to_json }
|
25
|
-
let(:do_get) { subject.get('http://example.org') }
|
26
|
-
|
27
|
-
it "performs a get request" do
|
28
|
-
do_get
|
29
|
-
expect(request).to have_been_made
|
30
|
-
end
|
31
|
-
|
32
|
-
context "with get params" do
|
33
|
-
let!(:request) do
|
34
|
-
stub_request(:get, "http://example.org/?foo=hello+world&bar=wiffle").
|
35
|
-
to_return(status: 200)
|
36
|
-
end
|
37
|
-
|
38
|
-
let(:do_get) { subject.get('http://example.org', { 'foo' => 'hello world', 'bar' => 'wiffle' }) }
|
39
|
-
|
40
|
-
it "correctly converts and encodes get params" do
|
41
|
-
do_get
|
42
|
-
expect(request).to have_been_made
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
it "retries on failure" do
|
47
|
-
expect(subject).to receive(:until_truthy_or_max_times)
|
48
|
-
do_get
|
49
|
-
end
|
50
|
-
|
51
|
-
it "returns a response" do
|
52
|
-
expect(do_get.body).to eq({"some" => "json"})
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "post" do
|
58
|
-
before do
|
59
|
-
allow(subject).to receive(:until_truthy_or_max_times) { |&block| block.call }
|
60
|
-
end
|
61
|
-
|
62
|
-
let!(:request) do
|
63
|
-
stub_request(:post, "http://example.org/").
|
64
|
-
with( headers: {
|
65
|
-
'Accept'=>'application/hal+json',
|
66
|
-
'Authorization'=>'Basic Zm9vOmJhcg==',
|
67
|
-
'Content-Type'=>'application/json'
|
68
|
-
},
|
69
|
-
body: request_body).
|
70
|
-
to_return(status: 200, body: response_body, headers: {'Content-Type' => 'application/json'})
|
71
|
-
end
|
72
|
-
|
73
|
-
let(:request_body) { {some: 'data'}.to_json }
|
74
|
-
let(:response_body) { {some: 'json'}.to_json }
|
75
|
-
|
76
|
-
let(:do_post) { subject.post('http://example.org/', request_body) }
|
77
|
-
|
78
|
-
it "performs a post request" do
|
79
|
-
do_post
|
80
|
-
expect(request).to have_been_made
|
81
|
-
end
|
82
|
-
|
83
|
-
it "calls Retry.until_truthy_or_max_times" do
|
84
|
-
expect(subject).to receive(:until_truthy_or_max_times)
|
85
|
-
do_post
|
86
|
-
end
|
87
|
-
|
88
|
-
it "returns a response" do
|
89
|
-
expect(do_post.body).to eq({"some" => "json"})
|
90
|
-
end
|
91
|
-
|
92
|
-
context "with custom headers" do
|
93
|
-
let!(:request) do
|
94
|
-
stub_request(:post, "http://example.org/").
|
95
|
-
with( headers: {
|
96
|
-
'Accept'=>'foo'
|
97
|
-
}).
|
98
|
-
to_return(status: 200)
|
99
|
-
end
|
100
|
-
|
101
|
-
let(:do_post) { subject.post('http://example.org/', request_body, {"Accept" => "foo"} ) }
|
102
|
-
|
103
|
-
it "performs a post request with custom headers" do
|
104
|
-
do_post
|
105
|
-
expect(request).to have_been_made
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe "integration test" do
|
111
|
-
before do
|
112
|
-
allow(subject).to receive(:sleep)
|
113
|
-
end
|
114
|
-
|
115
|
-
let(:do_get) { subject.get('http://example.org') }
|
116
|
-
|
117
|
-
context "with a 50x error is returned less than the max number of tries" do
|
118
|
-
let!(:request) do
|
119
|
-
stub_request(:get, "http://example.org").
|
120
|
-
to_return({ status: 500 }, { status: 502 }, { status: 503 }, { status: 200 })
|
121
|
-
end
|
122
|
-
|
123
|
-
it "retries" do
|
124
|
-
expect(do_get.status).to eq 200
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
context "with a 50x error is returned more than the max number of tries" do
|
129
|
-
let!(:request) do
|
130
|
-
stub_request(:get, "http://example.org").
|
131
|
-
to_return({ status: 500 }, { status: 501 }, { status: 502 }, { status: 503 }, { status: 504 })
|
132
|
-
end
|
133
|
-
|
134
|
-
it "retries and returns the last 50x response" do
|
135
|
-
expect(do_get.status).to eq 504
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
context "when exceptions are raised" do
|
140
|
-
before do
|
141
|
-
allow($stderr).to receive(:puts)
|
142
|
-
end
|
143
|
-
|
144
|
-
let!(:request) do
|
145
|
-
stub_request(:get, "http://example.org")
|
146
|
-
.to_raise(Errno::ECONNREFUSED)
|
147
|
-
end
|
148
|
-
|
149
|
-
it "logs the error" do
|
150
|
-
expect($stderr).to receive(:puts).with(/Errno::ECONNREFUSED/)
|
151
|
-
begin
|
152
|
-
do_get
|
153
|
-
rescue Errno::ECONNREFUSED
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
it "retries and raises the last exception" do
|
158
|
-
expect { do_get }.to raise_error(Errno::ECONNREFUSED)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
describe "x509 certificate" do
|
164
|
-
FAKE_SERVER_URL = 'https://localhost:4444'
|
165
|
-
X509_CERT_FILE_PATH = './spec/fixtures/certificates/client_cert.pem'
|
166
|
-
X509_KEY_FILE_PATH = './spec/fixtures/certificates/key.pem'
|
167
|
-
UNSIGNED_X509_CERT_FILE_PATH = './spec/fixtures/certificates/unsigned_cert.pem'
|
168
|
-
UNSIGNED_X509_KEY_FILE_PATH = './spec/fixtures/certificates/unsigned_key.pem'
|
169
|
-
|
170
|
-
def wait_for_server_to_start
|
171
|
-
Faraday.new(
|
172
|
-
url: FAKE_SERVER_URL,
|
173
|
-
ssl: {
|
174
|
-
verify: false,
|
175
|
-
client_cert: OpenSSL::X509::Certificate.new(File.read(X509_CERT_FILE_PATH)),
|
176
|
-
client_key: OpenSSL::PKey::RSA.new(File.read(X509_KEY_FILE_PATH))
|
177
|
-
}
|
178
|
-
) do |builder|
|
179
|
-
builder.request :retry, max: 20, interval: 0.5, exceptions: [StandardError]
|
180
|
-
builder.adapter :net_http
|
181
|
-
end.get
|
182
|
-
end
|
183
|
-
|
184
|
-
let(:do_get) { subject.get(FAKE_SERVER_URL) }
|
185
|
-
|
186
|
-
before(:all) do
|
187
|
-
@pipe = IO.popen("bundle exec ruby ./spec/support/ssl_server.rb")
|
188
|
-
ENV['SSL_CERT_FILE'] = "./spec/fixtures/certificates/ca_cert.pem"
|
189
|
-
|
190
|
-
wait_for_server_to_start()
|
191
|
-
end
|
192
|
-
|
193
|
-
context "with valid x509 client certificates" do
|
194
|
-
before do
|
195
|
-
ENV['X509_CLIENT_CERT_FILE'] = X509_CERT_FILE_PATH
|
196
|
-
ENV['X509_CLIENT_KEY_FILE'] = X509_KEY_FILE_PATH
|
197
|
-
end
|
198
|
-
|
199
|
-
it "succeeds" do
|
200
|
-
expect(do_get.status).to eq 200
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
context "when invalid x509 certificates are set" do
|
205
|
-
before do
|
206
|
-
ENV['X509_CLIENT_CERT_FILE'] = UNSIGNED_X509_CERT_FILE_PATH
|
207
|
-
ENV['X509_CLIENT_KEY_FILE'] = UNSIGNED_X509_KEY_FILE_PATH
|
208
|
-
end
|
209
|
-
|
210
|
-
it "fails raising SSL error" do
|
211
|
-
expect { do_get }
|
212
|
-
.to raise_error { |error|
|
213
|
-
expect([OpenSSL::SSL::SSLError, Errno::ECONNRESET]).to include(error.class)
|
214
|
-
}
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
context "when no x509 certificates are set" do
|
219
|
-
before do
|
220
|
-
ENV['X509_CLIENT_CERT_FILE'] = nil
|
221
|
-
ENV['X509_CLIENT_KEY_FILE'] = nil
|
222
|
-
end
|
223
|
-
|
224
|
-
it "fails raising SSL error" do
|
225
|
-
expect { do_get }
|
226
|
-
.to raise_error { |error|
|
227
|
-
expect([OpenSSL::SSL::SSLError, Errno::ECONNRESET]).to include(error.class)
|
228
|
-
}
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
after(:all) do
|
233
|
-
Process.kill "KILL", @pipe.pid
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
@@ -1,127 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/hal/link'
|
2
|
-
require 'pact_broker/client/hal/entity'
|
3
|
-
require 'pact_broker/client/hal/http_client'
|
4
|
-
|
5
|
-
module PactBroker::Client
|
6
|
-
module Hal
|
7
|
-
describe Link do
|
8
|
-
before do
|
9
|
-
allow(response).to receive(:header).with("Content-Type").and_return(content_type)
|
10
|
-
end
|
11
|
-
|
12
|
-
let(:http_client) do
|
13
|
-
instance_double('PactBroker::Client::Hal::HttpClient', post: response)
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:response) do
|
17
|
-
instance_double('PactBroker::Client::Hal::HttpClient::Response', success?: success, body: response_body, raw_body: response_body.to_json)
|
18
|
-
end
|
19
|
-
|
20
|
-
let(:success) { true }
|
21
|
-
|
22
|
-
let(:entity) do
|
23
|
-
instance_double('PactBroker::Client::Hal::Entity')
|
24
|
-
end
|
25
|
-
|
26
|
-
let(:attrs) do
|
27
|
-
{
|
28
|
-
'href' => 'http://foo/{bar}',
|
29
|
-
'title' => 'title',
|
30
|
-
method: :post
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:response_body) do
|
35
|
-
{
|
36
|
-
'some' => 'body'
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
let(:content_type) { nil }
|
41
|
-
|
42
|
-
subject { Link.new(attrs, http_client) }
|
43
|
-
|
44
|
-
before do
|
45
|
-
allow(PactBroker::Client::Hal::Entity).to receive(:new).and_return(entity)
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#run" do
|
49
|
-
let(:do_run) { subject.run('foo' => 'bar') }
|
50
|
-
|
51
|
-
it "executes the configured http request" do
|
52
|
-
expect(http_client).to receive(:post)
|
53
|
-
do_run
|
54
|
-
end
|
55
|
-
|
56
|
-
it "creates an Entity" do
|
57
|
-
expect(PactBroker::Client::Hal::Entity).to receive(:new).with("http://foo/{bar}", response_body, http_client, response)
|
58
|
-
do_run
|
59
|
-
end
|
60
|
-
|
61
|
-
it "returns an Entity" do
|
62
|
-
expect(do_run).to eq entity
|
63
|
-
end
|
64
|
-
|
65
|
-
context "when an error response is returned" do
|
66
|
-
before do
|
67
|
-
allow(PactBroker::Client::Hal::ErrorEntity).to receive(:new).and_return(entity)
|
68
|
-
end
|
69
|
-
|
70
|
-
let(:success) { false }
|
71
|
-
|
72
|
-
it "creates an ErrorEntity" do
|
73
|
-
expect(PactBroker::Client::Hal::ErrorEntity).to receive(:new).with("http://foo/{bar}", response_body.to_json, http_client, response)
|
74
|
-
do_run
|
75
|
-
end
|
76
|
-
|
77
|
-
context "when a JSON error is returned" do
|
78
|
-
let(:content_type) { "application/json" }
|
79
|
-
|
80
|
-
it "parses the response body" do
|
81
|
-
expect(PactBroker::Client::Hal::ErrorEntity).to receive(:new).with("http://foo/{bar}", response_body, http_client, response)
|
82
|
-
do_run
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "#get" do
|
89
|
-
before do
|
90
|
-
allow(http_client).to receive(:get).and_return(response)
|
91
|
-
end
|
92
|
-
|
93
|
-
let(:do_get) { subject.get({ 'foo' => 'bar' }) }
|
94
|
-
|
95
|
-
it "executes an HTTP Get request" do
|
96
|
-
expect(http_client).to receive(:get).with('http://foo/{bar}', { 'foo' => 'bar' }, {})
|
97
|
-
do_get
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "#post" do
|
102
|
-
let(:do_post) { subject.post({ 'foo' => 'bar' }, { 'Accept' => 'foo' }) }
|
103
|
-
|
104
|
-
context "with custom headers" do
|
105
|
-
it "executes an HTTP Post request with the custom headers" do
|
106
|
-
expect(http_client).to receive(:post).with('http://foo/{bar}', '{"foo":"bar"}', { 'Accept' => 'foo' })
|
107
|
-
do_post
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe "#expand" do
|
113
|
-
it "returns a duplicate Link with the expanded href" do
|
114
|
-
expect(subject.expand(bar: 'wiffle').href).to eq "http://foo/wiffle"
|
115
|
-
end
|
116
|
-
|
117
|
-
it "returns a duplicate Link with the expanded href with URL escaping" do
|
118
|
-
expect(subject.expand(bar: 'wiffle meep').href).to eq "http://foo/wiffle%20meep"
|
119
|
-
end
|
120
|
-
|
121
|
-
it "returns a duplicate Link with the expanded href with URL escaping for forward slashes" do
|
122
|
-
expect(subject.expand(bar: 'wiffle/meep').href).to eq "http://foo/wiffle%2Fmeep"
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'pact_broker/client/matrix/abbreviate_version_number'
|
3
|
-
|
4
|
-
module PactBroker
|
5
|
-
module Client
|
6
|
-
describe Matrix::AbbreviateVersionNumber do
|
7
|
-
describe '.call' do
|
8
|
-
subject(:result) { described_class.call(version) }
|
9
|
-
|
10
|
-
context 'when version is nil' do
|
11
|
-
let(:version) { nil }
|
12
|
-
it { is_expected.to be_nil }
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'when version is git sha' do
|
16
|
-
let(:version) { '182f9c6e4d7a5779c4507cb8b3e505ac927d0394' }
|
17
|
-
it { is_expected.to eq('182f9c6...') }
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'when version is too long' do
|
21
|
-
let(:version) { '182f9c6e4d7a5779c4507cb8b3e505ac927d0394' * 2 }
|
22
|
-
it { is_expected.to eq(version[0...60] + '...') }
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'when the version is something unknown and fits max length' do
|
26
|
-
let(:version) { '123' }
|
27
|
-
it { is_expected.to eq('123') }
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when version is embedded into semantic version v1' do
|
31
|
-
let(:version) { 'v1.3.4+182f9c6e4d7a5779c4507cb8b3e505ac927d0394' }
|
32
|
-
it { is_expected.to eq('v1.3.4+182f9c6...') }
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'when version is embedded into semantic version v2' do
|
36
|
-
let(:version) { '1.3.4(182f9c6e4d7a5779c4507cb8b3e505ac927d0394)' }
|
37
|
-
it { is_expected.to eq('1.3.4(182f9c6...)') }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/matrix/resource'
|
2
|
-
|
3
|
-
module PactBroker
|
4
|
-
module Client
|
5
|
-
class Matrix
|
6
|
-
describe Resource do
|
7
|
-
|
8
|
-
let(:matrix_hash) { JSON.parse(File.read('spec/support/matrix.json'), symbolize_names: true) }
|
9
|
-
|
10
|
-
subject { Resource.new(matrix_hash) }
|
11
|
-
|
12
|
-
describe "any_unknown?" do
|
13
|
-
context "when $summary.unknown is greater than 0" do
|
14
|
-
it "is true" do
|
15
|
-
expect(subject.any_unknown?).to be true
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when $summary.unknown is 0" do
|
20
|
-
before do
|
21
|
-
matrix_hash[:summary][:unknown] = 0
|
22
|
-
end
|
23
|
-
|
24
|
-
it "is false" do
|
25
|
-
expect(subject.any_unknown?).to be false
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "supports_unknown_count?" do
|
31
|
-
context "when $summary.unknown is present" do
|
32
|
-
it "is true" do
|
33
|
-
expect(subject.supports_unknown_count?).to be true
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when $summary.unknown is nil" do
|
38
|
-
before do
|
39
|
-
matrix_hash[:summary][:unknown] = nil
|
40
|
-
end
|
41
|
-
|
42
|
-
it "is false" do
|
43
|
-
expect(subject.supports_unknown_count?).to be false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "when $summary.unknown is not an Integer" do
|
48
|
-
before do
|
49
|
-
matrix_hash[:summary][:unknown] = true
|
50
|
-
end
|
51
|
-
|
52
|
-
it "is false" do
|
53
|
-
expect(subject.supports_unknown_count?).to be false
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "when $summary.unknown is not present" do
|
58
|
-
before do
|
59
|
-
matrix_hash[:summary].delete(:unknown)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "is false" do
|
63
|
-
expect(subject.supports_unknown_count?).to be false
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/matrix/resource'
|
2
|
-
require 'pact_broker/client/matrix/text_formatter'
|
3
|
-
|
4
|
-
module PactBroker
|
5
|
-
module Client
|
6
|
-
describe Matrix::TextFormatter do
|
7
|
-
let(:matrix) { PactBroker::Client::Matrix::Resource.new(JSON.parse(File.read('spec/support/matrix.json'), symbolize_names: true)) }
|
8
|
-
let(:expected_matrix_lines) { File.read('spec/support/matrix.txt') }
|
9
|
-
|
10
|
-
# SublimeText removes whitespace from the end of files when you save them,
|
11
|
-
# so removing trailing whitespace before comparing
|
12
|
-
def strip_trailing_whitespace(text)
|
13
|
-
text.split("\n").collect(&:strip).join("\n")
|
14
|
-
end
|
15
|
-
|
16
|
-
subject { strip_trailing_whitespace(Matrix::TextFormatter.call(matrix)) }
|
17
|
-
|
18
|
-
context "with valid data" do
|
19
|
-
it "it has the right text" do
|
20
|
-
expect(subject).to start_with expected_matrix_lines
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with invalid data" do
|
25
|
-
let(:expected_matrix_lines) { File.read('spec/support/matrix_error.txt') }
|
26
|
-
let(:matrix) { PactBroker::Client::Matrix::Resource.new(matrix: [{}]) }
|
27
|
-
|
28
|
-
it "doesn't blow up" do
|
29
|
-
expect(subject).to eq expected_matrix_lines
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "when some rows have a verification result URL and some don't" do
|
34
|
-
let(:matrix_lines) do
|
35
|
-
line_creator = -> { JSON.parse(File.read('spec/support/matrix.json'), symbolize_names: true)[:matrix].first }
|
36
|
-
line_1 = line_creator.call
|
37
|
-
line_2 = line_creator.call
|
38
|
-
line_3 = line_creator.call
|
39
|
-
|
40
|
-
# ensure the data is as expected
|
41
|
-
expect(line_1.dig(:consumer, :version, :number)).to_not be nil
|
42
|
-
expect(line_1.dig(:provider, :version, :number)).to_not be nil
|
43
|
-
|
44
|
-
line_1[:consumer][:version][:number] = "4"
|
45
|
-
line_2[:consumer][:version][:number] = "3"
|
46
|
-
line_3[:consumer][:version][:number] = "5"
|
47
|
-
|
48
|
-
line_2[:verificationResult] = nil
|
49
|
-
line_3[:verificationResult][:success] = false
|
50
|
-
[line_1, line_2, line_3].shuffle
|
51
|
-
end
|
52
|
-
|
53
|
-
let(:matrix) { PactBroker::Client::Matrix::Resource.new(matrix: matrix_lines) }
|
54
|
-
|
55
|
-
let(:expected_matrix_lines) { File.read('spec/support/matrix_with_results.txt') }
|
56
|
-
|
57
|
-
it "only provides a result number for the lines that have a result URL" do
|
58
|
-
expect(subject).to eq expected_matrix_lines
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'pact_broker/client/matrix'
|
2
|
-
|
3
|
-
module PactBroker
|
4
|
-
module Client
|
5
|
-
describe Matrix do
|
6
|
-
let(:matrix) { Matrix.new(base_url: 'http://example.org') }
|
7
|
-
|
8
|
-
context "when the matrix resource is not found because the broker is the wrong version" do
|
9
|
-
let!(:request) { stub_request(:get, /matrix/).to_return(status: 404) }
|
10
|
-
|
11
|
-
it "raises a helpful error" do
|
12
|
-
expect { matrix.get([{name: "Foo", version: "1"}]) }.to raise_error PactBroker::Client::Error, %r{Matrix resource not found at http://example.org/matrix}
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|