Skip to content

Commit 6d099f5

Browse files
committed
feat(matrix): add tags to json response
See: pact-foundation#288
1 parent 9e84ce7 commit 6d099f5

File tree

2 files changed

+61
-8
lines changed

2 files changed

+61
-8
lines changed

lib/pact_broker/api/decorators/matrix_decorator.rb

+25-6
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,15 @@ def matrix(base_url)
5252
provider = OpenStruct.new(name: line.provider_name)
5353
consumer = OpenStruct.new(name: line.consumer_name)
5454
consumer_version = OpenStruct.new(number: line.consumer_version_number, pacticipant: consumer)
55-
line_hash(consumer, provider, consumer_version, line, base_url)
55+
provider_version = line.provider_version_number ? OpenStruct.new(number: line.provider_version_number, pacticipant: provider) : nil
56+
line_hash(consumer, provider, consumer_version, provider_version, line, base_url)
5657
end
5758
end
5859

59-
def line_hash(consumer, provider, consumer_version, line, base_url)
60+
def line_hash(consumer, provider, consumer_version, provider_version, line, base_url)
6061
{
6162
consumer: consumer_hash(line, consumer, consumer_version, base_url),
62-
provider: provider_hash(line, provider, base_url),
63+
provider: provider_hash(line, provider, provider_version, base_url),
6364
pact: pact_hash(line, base_url),
6465
verificationResult: verification_hash(line, base_url)
6566
}
@@ -74,7 +75,8 @@ def consumer_hash(line, consumer, consumer_version, base_url)
7475
self: {
7576
href: version_url(base_url, consumer_version)
7677
}
77-
}
78+
},
79+
tags: tags(line.consumer_version_tags)
7880
},
7981
_links: {
8082
self: {
@@ -84,7 +86,16 @@ def consumer_hash(line, consumer, consumer_version, base_url)
8486
}
8587
end
8688

87-
def provider_hash(line, provider, base_url)
89+
def tags(tags)
90+
tags.collect do | tag |
91+
{
92+
name: tag.name,
93+
latest: tag.latest?
94+
}
95+
end
96+
end
97+
98+
def provider_hash(line, provider, provider_version, base_url)
8899
hash = {
89100
name: line.provider_name,
90101
version: nil,
@@ -96,7 +107,15 @@ def provider_hash(line, provider, base_url)
96107
}
97108

98109
if !line.provider_version_number.nil?
99-
hash[:version] = { number: line.provider_version_number }
110+
hash[:version] = {
111+
number: line.provider_version_number,
112+
_links: {
113+
self: {
114+
href: version_url(base_url, provider_version)
115+
}
116+
},
117+
tags: tags(line.provider_version_tags)
118+
}
100119
end
101120

102121
hash

spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb

+36-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ module Decorators
1616
{
1717
consumer_name: "Consumer",
1818
consumer_version_number: "1.0.0",
19+
consumer_version_tags: consumer_version_tags,
20+
provider_version_tags: provider_version_tags,
1921
pact_version_sha: "1234",
2022
pact_created_at: pact_created_at,
2123
provider_version_number: "4.5.6",
@@ -33,6 +35,7 @@ module Decorators
3335
{
3436
consumer_name: "Consumer",
3537
consumer_version_number: "1.0.0",
38+
consumer_version_tags: [],
3639
pact_version_sha: "1234",
3740
pact_created_at: pact_created_at,
3841
provider_version_number: nil,
@@ -59,7 +62,14 @@ module Decorators
5962
self: {
6063
href: 'http://example.org/pacticipants/Consumer/versions/1.0.0'
6164
}
62-
}
65+
},
66+
tags: [
67+
{
68+
name: 'prod',
69+
latest: true
70+
71+
}
72+
]
6373
}
6474
}
6575
end
@@ -73,7 +83,19 @@ module Decorators
7383
}
7484
},
7585
version: {
76-
number: '4.5.6'
86+
number: '4.5.6',
87+
_links: {
88+
self: {
89+
href: 'http://example.org/pacticipants/Provider/versions/4.5.6'
90+
}
91+
},
92+
tags: [
93+
{
94+
name: 'master',
95+
latest: false
96+
}
97+
]
98+
7799
}
78100
}
79101
end
@@ -101,6 +123,18 @@ module Decorators
101123
}
102124
end
103125

126+
let(:consumer_version_tags) do
127+
[
128+
double('tag', name: 'prod', latest?: true)
129+
]
130+
end
131+
132+
let(:provider_version_tags) do
133+
[
134+
double('tag', name: 'master', latest?: false)
135+
]
136+
end
137+
104138
let(:query_results){ PactBroker::Matrix::QueryResultsWithDeploymentStatusSummary.new([row_1, row_2], selectors, options, resolved_selectors, integrations, deployment_status_summary)}
105139
let(:selectors) { nil }
106140
let(:integrations){ [] }

0 commit comments

Comments
 (0)