pact_broker-client 1.75.3 → 1.75.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|