pact_broker 2.62.0 → 2.63.0
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 +8 -0
- data/lib/pact_broker/api.rb +1 -0
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +16 -0
- data/lib/pact_broker/api/pact_broker_urls.rb +6 -2
- data/lib/pact_broker/api/resources/can_i_deploy_badge.rb +85 -0
- data/lib/pact_broker/api/resources/error_handler.rb +4 -4
- data/lib/pact_broker/api/resources/version.rb +6 -7
- data/lib/pact_broker/badges/service.rb +11 -0
- data/lib/pact_broker/doc/views/pacticipant/can-i-deploy-badge.markdown +9 -0
- data/lib/pact_broker/version.rb +1 -1
- data/spec/features/get_can_i_deploy_badge_spec.rb +13 -0
- data/spec/features/get_matrix_badge_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb +80 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61338a93bd65ffa3ec70f4fdfd9b509a0d5c0608dce8cea3f779e3ac22151412
|
4
|
+
data.tar.gz: 99819023ba051657020d314fe6d3005a04660d70467a57c5b5369a08a5525e2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7da446c51346413782377eb409c2d3159fcb322147d675324126243bfb8b115ff042d210b3cf25ee46ebe73093611e4de85db03f243c5ffb06299239d6aff637
|
7
|
+
data.tar.gz: 6b191f39b782bf811d58e15d149fa5e786227e6a86d93c0f8888a6134b992d6f60ad58ff2b2b6cf84ba612b72368cf569471b9214b85f7ce173e18872e89ddec
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
<a name="v2.63.0"></a>
|
2
|
+
### v2.63.0 (2020-09-25)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* allow label of can-i-deploy badge to be customised by setting the label query parameter ([ed544f94](/../../commit/ed544f94))
|
7
|
+
* add badges for can-i-deploy ([887a9ca3](/../../commit/887a9ca3))
|
8
|
+
|
1
9
|
<a name="v2.62.0"></a>
|
2
10
|
### v2.62.0 (2020-09-23)
|
3
11
|
|
data/lib/pact_broker/api.rb
CHANGED
@@ -71,6 +71,7 @@ module PactBroker
|
|
71
71
|
add ['pacticipants', :pacticipant_name, 'versions'], Api::Resources::Versions, {resource_name: "pacticipant_versions"}
|
72
72
|
add ['pacticipants', :pacticipant_name, 'versions', :pacticipant_version_number], Api::Resources::Version, {resource_name: "pacticipant_version"}
|
73
73
|
add ['pacticipants', :pacticipant_name, 'latest-version', :tag], Api::Resources::Version, {resource_name: "latest_tagged_pacticipant_version"}
|
74
|
+
add ['pacticipants', :pacticipant_name, 'latest-version', :tag, 'can-i-deploy', 'to', :to, 'badge'], Api::Resources::CanIDeployBadge, { resource_name: "can_i_deploy_badge" }
|
74
75
|
add ['pacticipants', :pacticipant_name, 'latest-version'], Api::Resources::Version, {resource_name: "latest_pacticipant_version"}
|
75
76
|
add ['pacticipants', :pacticipant_name, 'versions', :pacticipant_version_number, 'tags', :tag_name], Api::Resources::Tag, {resource_name: "pacticipant_version_tag"}
|
76
77
|
add ['pacticipants', :pacticipant_name, 'labels', :label_name], Api::Resources::Label, {resource_name: "pacticipant_label"}
|
@@ -58,6 +58,22 @@ module PactBroker
|
|
58
58
|
}
|
59
59
|
end
|
60
60
|
|
61
|
+
link :'pb:can-i-deploy-badge' do | options |
|
62
|
+
{
|
63
|
+
title: "Can I Deploy #{represented.name} badge",
|
64
|
+
href: templated_can_i_deploy_badge_url(represented.name, options[:base_url]),
|
65
|
+
templated: true
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
curies do | options |
|
70
|
+
[{
|
71
|
+
name: :pb,
|
72
|
+
href: options[:base_url] + '/doc/{rel}?context=pacticipant',
|
73
|
+
templated: true
|
74
|
+
}]
|
75
|
+
end
|
76
|
+
|
61
77
|
def to_hash options
|
62
78
|
h = super
|
63
79
|
dasherized = DasherizedVersionDecorator.new(represented).to_hash(options)
|
@@ -197,11 +197,15 @@ module PactBroker
|
|
197
197
|
end
|
198
198
|
|
199
199
|
def templated_tag_url_for_pacticipant pacticipant_name, base_url = ""
|
200
|
-
pacticipant_url_from_params({pacticipant_name: pacticipant_name}, base_url) + "/versions/{version}/tags/{tag}"
|
200
|
+
pacticipant_url_from_params({ pacticipant_name: pacticipant_name }, base_url) + "/versions/{version}/tags/{tag}"
|
201
201
|
end
|
202
202
|
|
203
203
|
def templated_label_url_for_pacticipant pacticipant_name, base_url = ""
|
204
|
-
pacticipant_url_from_params({pacticipant_name: pacticipant_name}, base_url) + "/labels/{label}"
|
204
|
+
pacticipant_url_from_params({ pacticipant_name: pacticipant_name }, base_url) + "/labels/{label}"
|
205
|
+
end
|
206
|
+
|
207
|
+
def templated_can_i_deploy_badge_url pacticipant_name, base_url = ""
|
208
|
+
pacticipant_url_from_params({ pacticipant_name: pacticipant_name }, base_url) + "/latest-version/{tag}/can-i-deploy/to/{environmentTag}/badge"
|
205
209
|
end
|
206
210
|
|
207
211
|
def label_url label, base_url
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'pact_broker/matrix/can_i_deploy_query_schema'
|
2
|
+
require 'pact_broker/matrix/parse_can_i_deploy_query'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
7
|
+
class CanIDeployBadge < BaseResource
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
selector = PactBroker::Matrix::UnresolvedSelector.new(pacticipant_name: pacticipant_name, latest: true, tag: identifier_from_path[:tag])
|
11
|
+
@options = {
|
12
|
+
latestby: 'cvp',
|
13
|
+
latest: true,
|
14
|
+
tag: identifier_from_path[:to]
|
15
|
+
}
|
16
|
+
@selectors = [selector]
|
17
|
+
end
|
18
|
+
|
19
|
+
def allowed_methods
|
20
|
+
["GET", "OPTIONS"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def content_types_provided
|
24
|
+
[['image/svg+xml', :to_svg]]
|
25
|
+
end
|
26
|
+
|
27
|
+
def resource_exists?
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
# Only called if resource_exists? returns false
|
32
|
+
def previously_existed?
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def is_authorized?(authorization_header)
|
37
|
+
super || PactBroker.configuration.enable_public_badge_access
|
38
|
+
end
|
39
|
+
|
40
|
+
def forbidden?
|
41
|
+
false
|
42
|
+
end
|
43
|
+
|
44
|
+
def moved_temporarily?
|
45
|
+
response.headers['Cache-Control'] = 'no-cache'
|
46
|
+
begin
|
47
|
+
if pacticipant
|
48
|
+
if version
|
49
|
+
badge_service.can_i_deploy_badge_url(pacticipant_name, identifier_from_path[:tag], identifier_from_path[:to], label, results.deployable?)
|
50
|
+
else
|
51
|
+
badge_service.error_badge_url("version", "not found")
|
52
|
+
end
|
53
|
+
else
|
54
|
+
badge_service.error_badge_url(selectors.first.pacticipant_name, "not found")
|
55
|
+
end
|
56
|
+
rescue StandardError => e
|
57
|
+
# Want to render a badge, even if there's an error
|
58
|
+
badge_service.error_badge_url("error", ErrorHandler.display_message(e, "reference: #{ErrorHandler.generate_error_reference}"))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def policy_name
|
63
|
+
:'badges::badge'
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
attr_reader :selectors, :options
|
69
|
+
|
70
|
+
def results
|
71
|
+
@results ||= matrix_service.find(selectors, options)
|
72
|
+
end
|
73
|
+
|
74
|
+
def version
|
75
|
+
@version ||= version_service.find_by_pacticipant_name_and_latest_tag(identifier_from_path[:pacticipant_name], identifier_from_path[:tag])
|
76
|
+
end
|
77
|
+
|
78
|
+
def label
|
79
|
+
lab = request.query['label']
|
80
|
+
lab && !lab.empty? ? lab : nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -32,11 +32,11 @@ module PactBroker
|
|
32
32
|
PactBroker.configuration.warning_error_classes.any? { |clazz| e.is_a?(clazz) }
|
33
33
|
end
|
34
34
|
|
35
|
-
def self.display_message(e,
|
35
|
+
def self.display_message(e, obfuscated_message)
|
36
36
|
if PactBroker.configuration.show_backtrace_in_error_response?
|
37
|
-
e.message ||
|
37
|
+
e.message || obfuscated_message
|
38
38
|
else
|
39
|
-
reportable?(e) ?
|
39
|
+
reportable?(e) ? obfuscated_message : e.message
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -47,7 +47,7 @@ module PactBroker
|
|
47
47
|
def self.response_body_hash e, error_reference
|
48
48
|
response_body = {
|
49
49
|
error: {
|
50
|
-
message: display_message(e, error_reference),
|
50
|
+
message: display_message(e, obfuscated_error_message(error_reference)),
|
51
51
|
reference: error_reference
|
52
52
|
}
|
53
53
|
}
|
@@ -6,7 +6,6 @@ module PactBroker
|
|
6
6
|
module Api
|
7
7
|
module Resources
|
8
8
|
class Version < BaseResource
|
9
|
-
|
10
9
|
def content_types_provided
|
11
10
|
[["application/hal+json", :to_json]]
|
12
11
|
end
|
@@ -20,7 +19,7 @@ module PactBroker
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def to_json
|
23
|
-
Decorators::VersionDecorator.new(version).to_json(
|
22
|
+
Decorators::VersionDecorator.new(version).to_json(decorator_options)
|
24
23
|
end
|
25
24
|
|
26
25
|
def delete_resource
|
@@ -35,12 +34,12 @@ module PactBroker
|
|
35
34
|
private
|
36
35
|
|
37
36
|
def version
|
38
|
-
if
|
39
|
-
@version ||= version_service.find_by_pacticipant_name_and_latest_tag(
|
40
|
-
elsif
|
41
|
-
@version ||= version_service.find_by_pacticipant_name_and_number
|
37
|
+
if identifier_from_path[:tag]
|
38
|
+
@version ||= version_service.find_by_pacticipant_name_and_latest_tag(identifier_from_path[:pacticipant_name], identifier_from_path[:tag])
|
39
|
+
elsif identifier_from_path[:pacticipant_version_number]
|
40
|
+
@version ||= version_service.find_by_pacticipant_name_and_number(identifier_from_path)
|
42
41
|
else
|
43
|
-
@version ||= version_service.find_latest_by_pacticpant_name
|
42
|
+
@version ||= version_service.find_latest_by_pacticpant_name(identifier_from_path)
|
44
43
|
end
|
45
44
|
end
|
46
45
|
end
|
@@ -33,6 +33,17 @@ module PactBroker
|
|
33
33
|
build_shield_io_uri(title, status, color)
|
34
34
|
end
|
35
35
|
|
36
|
+
def can_i_deploy_badge_url(pacticipant_name, tag, environment_tag, label, deployable)
|
37
|
+
title = label || "Can I deploy #{tag} #{pacticipant_name} to #{environment_tag}?"
|
38
|
+
status = deployable ? "yes" : "no"
|
39
|
+
color = deployable ? "brightgreen" : "red"
|
40
|
+
build_shield_io_uri(title, status, color)
|
41
|
+
end
|
42
|
+
|
43
|
+
def error_badge_url(left_text, right_text)
|
44
|
+
build_shield_io_uri(left_text, right_text, "lightgrey")
|
45
|
+
end
|
46
|
+
|
36
47
|
def clear_cache
|
37
48
|
CACHE.clear
|
38
49
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# Can I Deploy Badge
|
2
|
+
|
3
|
+
Allowed methods: `GET`
|
4
|
+
|
5
|
+
Path: `/pacticipants/{pacticipant}/latest-version/{tag}/can-i-deploy/to/{environmentTag}/badge`
|
6
|
+
|
7
|
+
Returns a status badge that can be displayed in a README file that indicates whether the specified version of a pacticipant can be deployed to the specified environment.
|
8
|
+
|
9
|
+
To set a custom label for the badge, set the `label` query parameter. eg `?label=my+custom+label+here`.
|
data/lib/pact_broker/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
RSpec.describe "can i deploy badge" do
|
2
|
+
before do
|
3
|
+
td.create_pact_with_hierarchy("Foo", "1.2.3", "Bar")
|
4
|
+
.create_consumer_version_tag("main")
|
5
|
+
end
|
6
|
+
|
7
|
+
subject { get("/pacticipants/Foo/latest-version/main/can-i-deploy/to/prod/badge", nil, { 'HTTP_ACCEPT' => 'image/svg+xml'}) }
|
8
|
+
|
9
|
+
it "returns a redirect response" do
|
10
|
+
expect(subject.status).to eq 307
|
11
|
+
expect(subject.headers['Location']).to start_with "https://img.shields.io/badge"
|
12
|
+
end
|
13
|
+
end
|
@@ -24,7 +24,7 @@ describe "get latest matrix badge with tags" do
|
|
24
24
|
# In the full app, the .svg extension is turned into an Accept header
|
25
25
|
# by ConvertFileExtensionToAcceptHeader
|
26
26
|
|
27
|
-
subject { get
|
27
|
+
subject { get(path, nil, {'HTTP_ACCEPT' => "image/svg+xml"}) }
|
28
28
|
|
29
29
|
it "returns a 200 status" do
|
30
30
|
expect(subject.status).to eq 200
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'pact_broker/api/resources/can_i_deploy_badge'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Resources
|
6
|
+
describe CanIDeployBadge do
|
7
|
+
before do
|
8
|
+
allow_any_instance_of(described_class).to receive(:badge_service).and_return(badge_service)
|
9
|
+
allow_any_instance_of(described_class).to receive(:matrix_service).and_return(matrix_service)
|
10
|
+
allow_any_instance_of(described_class).to receive(:pacticipant_service).and_return(pacticipant_service)
|
11
|
+
allow_any_instance_of(described_class).to receive(:version_service).and_return(version_service)
|
12
|
+
allow(badge_service).to receive(:can_i_deploy_badge_url).and_return("http://badge")
|
13
|
+
allow(badge_service).to receive(:error_badge_url).and_return("http://error")
|
14
|
+
allow(matrix_service).to receive(:find).and_return(results)
|
15
|
+
allow(pacticipant_service).to receive(:find_pacticipant_by_name).and_return(pacticipant)
|
16
|
+
allow(version_service).to receive(:find_by_pacticipant_name_and_latest_tag).and_return(version)
|
17
|
+
allow(PactBroker.configuration).to receive(:show_backtrace_in_error_response?).and_return(false)
|
18
|
+
allow(ErrorHandler).to receive(:generate_error_reference).and_return("abcd")
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:pacticipant_service) { class_double("PactBroker::Pacticipant::Service").as_stubbed_const }
|
22
|
+
let(:badge_service) { class_double("PactBroker::Badges::Service").as_stubbed_const }
|
23
|
+
let(:matrix_service) { class_double("PactBroker::Matrix::Service").as_stubbed_const }
|
24
|
+
let(:version_service) { class_double("PactBroker::Version::Service").as_stubbed_const }
|
25
|
+
let(:results) { double('results', deployable?: true) }
|
26
|
+
let(:pacticipant) { double('pacticipant') }
|
27
|
+
let(:version) { double('version') }
|
28
|
+
|
29
|
+
let(:path) { "/pacticipants/Foo/latest-version/main/can-i-deploy/to/prod/badge"}
|
30
|
+
|
31
|
+
subject { get(path) }
|
32
|
+
|
33
|
+
context "when the pacticipant exists" do
|
34
|
+
it "returns a redirect to the badge" do
|
35
|
+
expect(badge_service).to receive(:can_i_deploy_badge_url).with("Foo", "main", "prod", nil, true)
|
36
|
+
expect(subject.status).to eq 307
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when the pacticipant does not exist" do
|
41
|
+
let(:pacticipant) { nil }
|
42
|
+
|
43
|
+
it "returns a redirect to a 'not found' badge" do
|
44
|
+
expect(badge_service).to receive(:error_badge_url).with("Foo", "not found")
|
45
|
+
expect(subject.status).to eq 307
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when the version does not exist" do
|
50
|
+
let(:version) { nil }
|
51
|
+
|
52
|
+
it "returns a redirect to a 'not found' badge" do
|
53
|
+
expect(badge_service).to receive(:error_badge_url).with("version", "not found")
|
54
|
+
expect(subject.status).to eq 307
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "with a custom label" do
|
59
|
+
subject { get(path, label: "some custom label") }
|
60
|
+
|
61
|
+
it "returns a redirect to a badge with a custom label" do
|
62
|
+
expect(badge_service).to receive(:can_i_deploy_badge_url).with("Foo", "main", "prod", "some custom label", true)
|
63
|
+
subject
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "when there is an error" do
|
68
|
+
before do
|
69
|
+
allow(matrix_service).to receive(:find).and_raise("foo error")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "returns a redirect to a badge with an error message" do
|
73
|
+
expect(badge_service).to receive(:error_badge_url).with("error", "reference: abcd")
|
74
|
+
expect(subject.status).to eq 307
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.63.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-09-
|
13
|
+
date: 2020-09-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -642,6 +642,7 @@ files:
|
|
642
642
|
- lib/pact_broker/api/resources/badge.rb
|
643
643
|
- lib/pact_broker/api/resources/base_resource.rb
|
644
644
|
- lib/pact_broker/api/resources/can_i_deploy.rb
|
645
|
+
- lib/pact_broker/api/resources/can_i_deploy_badge.rb
|
645
646
|
- lib/pact_broker/api/resources/dashboard.rb
|
646
647
|
- lib/pact_broker/api/resources/default_base_resource.rb
|
647
648
|
- lib/pact_broker/api/resources/error_handler.rb
|
@@ -761,6 +762,7 @@ files:
|
|
761
762
|
- lib/pact_broker/doc/views/pact/publish-verification-results.markdown
|
762
763
|
- lib/pact_broker/doc/views/pact/tag-prod-version.markdown
|
763
764
|
- lib/pact_broker/doc/views/pact/tag-version.markdown
|
765
|
+
- lib/pact_broker/doc/views/pacticipant/can-i-deploy-badge.markdown
|
764
766
|
- lib/pact_broker/doc/views/pending-provider-pacts.markdown
|
765
767
|
- lib/pact_broker/doc/views/provider-pacts-for-verification.markdown
|
766
768
|
- lib/pact_broker/doc/views/provider.markdown
|
@@ -1052,6 +1054,7 @@ files:
|
|
1052
1054
|
- spec/features/edit_webhook_spec.rb
|
1053
1055
|
- spec/features/execute_unsaved_webhook_spec.rb
|
1054
1056
|
- spec/features/execute_webhook_spec.rb
|
1057
|
+
- spec/features/get_can_i_deploy_badge_spec.rb
|
1055
1058
|
- spec/features/get_dashboard_spec.rb
|
1056
1059
|
- spec/features/get_diff_spec.rb
|
1057
1060
|
- spec/features/get_integrations_dot_file_spec.rb
|
@@ -1166,6 +1169,7 @@ files:
|
|
1166
1169
|
- spec/lib/pact_broker/api/renderers/integrations_dot_renderer_spec.rb
|
1167
1170
|
- spec/lib/pact_broker/api/resources/all_webhooks_spec.rb
|
1168
1171
|
- spec/lib/pact_broker/api/resources/badge_spec.rb
|
1172
|
+
- spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb
|
1169
1173
|
- spec/lib/pact_broker/api/resources/dashboard_spec.rb
|
1170
1174
|
- spec/lib/pact_broker/api/resources/default_base_resource_spec.rb
|
1171
1175
|
- spec/lib/pact_broker/api/resources/error_handler_spec.rb
|
@@ -1438,6 +1442,7 @@ test_files:
|
|
1438
1442
|
- spec/features/edit_webhook_spec.rb
|
1439
1443
|
- spec/features/execute_unsaved_webhook_spec.rb
|
1440
1444
|
- spec/features/execute_webhook_spec.rb
|
1445
|
+
- spec/features/get_can_i_deploy_badge_spec.rb
|
1441
1446
|
- spec/features/get_dashboard_spec.rb
|
1442
1447
|
- spec/features/get_diff_spec.rb
|
1443
1448
|
- spec/features/get_integrations_dot_file_spec.rb
|
@@ -1552,6 +1557,7 @@ test_files:
|
|
1552
1557
|
- spec/lib/pact_broker/api/renderers/integrations_dot_renderer_spec.rb
|
1553
1558
|
- spec/lib/pact_broker/api/resources/all_webhooks_spec.rb
|
1554
1559
|
- spec/lib/pact_broker/api/resources/badge_spec.rb
|
1560
|
+
- spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb
|
1555
1561
|
- spec/lib/pact_broker/api/resources/dashboard_spec.rb
|
1556
1562
|
- spec/lib/pact_broker/api/resources/default_base_resource_spec.rb
|
1557
1563
|
- spec/lib/pact_broker/api/resources/error_handler_spec.rb
|