Skip to content

Commit b58f4fb

Browse files
committed
fix: URL encode consumer version number in pact URL
Fixes: pact-foundation#253
1 parent ae5dd1d commit b58f4fb

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

lib/pact_broker/api/pact_broker_urls.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def version_url_from_params params, base_url = ''
4747
end
4848

4949
def pact_url base_url, pact
50-
"#{pactigration_base_url(base_url, pact)}/version/#{pact.consumer_version_number}"
50+
"#{pactigration_base_url(base_url, pact)}/version/#{url_encode(pact.consumer_version_number)}"
5151
end
5252

5353
def pact_version_url pact, base_url = ''

spec/lib/pact_broker/api/pact_broker_urls_spec.rb

+18-10
Original file line numberDiff line numberDiff line change
@@ -8,39 +8,47 @@ module Api
88
# \/\{[^\}\s\[\(\.]+\}
99

1010
let(:base_url) { "http://example.org" }
11-
let(:pact) { double('pact', consumer: consumer, provider: provider, consumer_version_number: "123", pact_version_sha: "5hbfu") }
12-
let(:consumer) { double('pacticipant', name: "Foo") }
13-
let(:provider) { double('pacticipant', name: "Bar") }
11+
let(:consumer_name) { "Foo/Foo" }
12+
let(:provider_name) { "Bar/Bar" }
13+
let(:pact) { double('pact', consumer: consumer, provider: provider, consumer_version_number: "123/456", pact_version_sha: "5hbfu") }
14+
let(:consumer) { double('pacticipant', name: consumer_name) }
15+
let(:provider) { double('pacticipant', name: provider_name) }
1416
let(:verification) do
1517
instance_double(PactBroker::Domain::Verification,
16-
consumer_name: "Foo",
17-
provider_name: "Bar",
18+
consumer_name: consumer_name,
19+
provider_name: provider_name,
1820
pact_version_sha: "1234",
1921
number: "1")
2022
end
2123

24+
describe "pact_url" do
25+
subject { PactBrokerUrls.pact_url(base_url, pact) }
26+
27+
it { is_expected.to eq "http://example.org/pacts/provider/Bar%2FBar/consumer/Foo%2FFoo/version/123%2F456" }
28+
end
29+
2230
describe "templated_tag_url_for_pacticipant" do
23-
subject { PactBrokerUrls.templated_tag_url_for_pacticipant("Bar", base_url) }
31+
subject { PactBrokerUrls.templated_tag_url_for_pacticipant(provider_name, base_url) }
2432

25-
it { is_expected.to eq "http://example.org/pacticipants/Bar/versions/{version}/tags/{tag}" }
33+
it { is_expected.to eq "http://example.org/pacticipants/Bar%2FBar/versions/{version}/tags/{tag}" }
2634
end
2735

2836
describe "pact_triggered_webhooks_url" do
2937
subject { PactBrokerUrls.pact_triggered_webhooks_url(pact, base_url) }
3038

31-
it { is_expected.to eq "http://example.org/pacts/provider/Bar/consumer/Foo/version/123/triggered-webhooks" }
39+
it { is_expected.to eq "http://example.org/pacts/provider/Bar%2FBar/consumer/Foo%2FFoo/version/123%2F456/triggered-webhooks" }
3240
end
3341

3442
describe "verification_triggered_webhooks_url" do
3543
subject { PactBrokerUrls.verification_triggered_webhooks_url(verification, base_url) }
3644

37-
it { is_expected.to eq "http://example.org/pacts/provider/Bar/consumer/Foo/pact-version/1234/verification-results/1/triggered-webhooks" }
45+
it { is_expected.to eq "http://example.org/pacts/provider/Bar%2FBar/consumer/Foo%2FFoo/pact-version/1234/verification-results/1/triggered-webhooks" }
3846
end
3947

4048
describe "templated_diff_url" do
4149
subject { PactBrokerUrls.templated_diff_url(pact, base_url) }
4250

43-
it { is_expected.to eq "http://example.org/pacts/provider/Bar/consumer/Foo/pact-version/5hbfu/diff/pact-version/{pactVersion}" }
51+
it { is_expected.to eq "http://example.org/pacts/provider/Bar%2FBar/consumer/Foo%2FFoo/pact-version/5hbfu/diff/pact-version/{pactVersion}" }
4452
end
4553
end
4654
end

0 commit comments

Comments
 (0)