Skip to content

Commit d02ea24

Browse files
committed
feat(dashboard api): correct latest verification results
1 parent 252aa0e commit d02ea24

File tree

3 files changed

+96
-12
lines changed

3 files changed

+96
-12
lines changed

lib/pact_broker/index/service.rb

+13-2
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,23 @@ def self.find_index_items options = {}
5454
tag_names = row.consumer_version_tags.collect(&:name)
5555
end
5656

57+
overall_latest = overall_latest_publication_ids.include?(row.pact_publication_id)
58+
latest_verification = if overall_latest
59+
verification_repository.find_latest_verification_for row.consumer_name, row.provider_name
60+
else
61+
tag_names.collect do | tag_name |
62+
verification_repository.find_latest_verification_for row.consumer_name, row.provider_name, tag_name
63+
end.compact.sort do | v1, v2 |
64+
v1.provider_version.order <=> v2.provider_version.order
65+
end.last
66+
end
67+
5768
index_items << PactBroker::Domain::IndexItem.create(
5869
row.consumer,
5970
row.provider,
6071
row.pact,
61-
overall_latest_publication_ids.include?(row.pact_publication_id),
62-
row.latest_verification,
72+
overall_latest,
73+
latest_verification,
6374
row.webhooks,
6475
row.latest_triggered_webhooks,
6576
row.consumer_head_tag_names,

spec/lib/pact_broker/index/service_spec.rb

+51
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,57 @@ module Index
188188
end
189189
end
190190
end
191+
192+
context "when a pact with a tag has been verified, and then a new changed version has been published with the same tag" do
193+
before do
194+
td.create_pact_with_hierarchy("Foo", "1", "Bar")
195+
.create_consumer_version_tag("feat-x")
196+
.comment("latest verification for feat-x tag")
197+
.create_verification(provider_version: "1")
198+
.comment("latest feat-x version")
199+
.create_consumer_version("2")
200+
.create_consumer_version_tag("feat-x")
201+
.comment("latest overall version")
202+
.create_consumer_version("3")
203+
.create_pact
204+
.comment("latest overall verification")
205+
.create_verification(provider_version: "2")
206+
207+
end
208+
209+
let(:options) { { tags: true } }
210+
211+
it "returns the latest feat-x verification for the latest feat-x pact" do
212+
expect(rows.last.tag_names).to eq ["feat-x"]
213+
expect(rows.last.provider_version_number).to eq "1"
214+
end
215+
end
216+
217+
context "when a pact with two tags has been verified, and then a new changed version has been published with two tags" do
218+
before do
219+
td.create_pact_with_hierarchy("Foo", "1", "Bar")
220+
.create_consumer_version_tag("feat-x")
221+
.create_verification(provider_version: "1", comment: "latest feat-x verif")
222+
.create_consumer_version("2")
223+
.create_consumer_version_tag("feat-y")
224+
.create_pact
225+
.create_verification(provider_version: "2", comment: "latest feat-y verif")
226+
.create_consumer_version("3")
227+
.create_consumer_version_tag("feat-x")
228+
.create_consumer_version_tag("feat-y")
229+
.create_pact
230+
.create_consumer_version("4")
231+
.create_pact
232+
end
233+
234+
let(:options) { { tags: true } }
235+
236+
it "returns the latest of the feat-x and feat-y verifications" do
237+
expect(rows.last.consumer_version_number).to eq "3"
238+
expect(rows.last.tag_names.sort).to eq ["feat-x", "feat-y"]
239+
expect(rows.last.provider_version_number).to eq "2"
240+
end
241+
end
191242
end
192243
end
193244
end

spec/support/test_data_builder.rb

+32-10
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ def initialize(params = {})
4444
@auto_refresh_matrix = params.fetch(:auto_refresh_matrix, true)
4545
end
4646

47+
def comment *args
48+
self
49+
end
50+
4751
def refresh_matrix
4852
if auto_refresh_matrix
4953
params = {}
@@ -124,23 +128,27 @@ def create_tag_with_hierarchy pacticipant_name, pacticipant_version, tag_name
124128
PactBroker::Domain::Tag.create(name: tag_name, version: version)
125129
end
126130

127-
def create_pacticipant pacticipant_name
131+
def create_pacticipant pacticipant_name, params = {}
132+
params.delete(:comment)
128133
@pacticipant = PactBroker::Domain::Pacticipant.create(:name => pacticipant_name)
129134
self
130135
end
131136

132-
def create_consumer consumer_name = "Consumer #{model_counter}"
137+
def create_consumer consumer_name = "Consumer #{model_counter}", params = {}
138+
params.delete(:comment)
133139
create_pacticipant consumer_name
134140
@consumer = @pacticipant
135141
self
136142
end
137143

138-
def use_consumer consumer_name
144+
def use_consumer consumer_name, params = {}
145+
params.delete(:comment)
139146
@consumer = PactBroker::Domain::Pacticipant.find(:name => consumer_name)
140147
self
141148
end
142149

143-
def create_provider provider_name = "Provider #{model_counter}"
150+
def create_provider provider_name = "Provider #{model_counter}", params = {}
151+
params.delete(:comment)
144152
create_pacticipant provider_name
145153
@provider = @pacticipant
146154
self
@@ -151,17 +159,20 @@ def use_provider provider_name
151159
self
152160
end
153161

154-
def create_version version_number = "1.0.#{model_counter}"
162+
def create_version version_number = "1.0.#{model_counter}", params = {}
163+
params.delete(:comment)
155164
@version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @pacticipant)
156165
self
157166
end
158167

159-
def create_consumer_version version_number = "1.0.#{model_counter}"
168+
def create_consumer_version version_number = "1.0.#{model_counter}", params = {}
169+
params.delete(:comment)
160170
@consumer_version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @consumer)
161171
self
162172
end
163173

164-
def create_provider_version version_number = "1.0.#{model_counter}"
174+
def create_provider_version version_number = "1.0.#{model_counter}", params = {}
175+
params.delete(:comment)
165176
@version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @provider)
166177
@provider_version = @version
167178
self
@@ -177,17 +188,20 @@ def use_provider_version version_number
177188
self
178189
end
179190

180-
def create_tag tag_name
191+
def create_tag tag_name, params = {}
192+
params.delete(:comment)
181193
@tag = PactBroker::Domain::Tag.create(name: tag_name, version: @version)
182194
self
183195
end
184196

185-
def create_consumer_version_tag tag_name
197+
def create_consumer_version_tag tag_name, params = {}
198+
params.delete(:comment)
186199
@tag = PactBroker::Domain::Tag.create(name: tag_name, version: @consumer_version)
187200
self
188201
end
189202

190-
def create_provider_version_tag tag_name
203+
def create_provider_version_tag tag_name, params = {}
204+
params.delete(:comment)
191205
@tag = PactBroker::Domain::Tag.create(name: tag_name, version: @provider_version)
192206
self
193207
end
@@ -198,6 +212,7 @@ def create_label label_name
198212
end
199213

200214
def create_pact params = {}
215+
params.delete(:comment)
201216
@pact = PactBroker::Pacts::Repository.new.create({version_id: @consumer_version.id, consumer_id: @consumer.id, provider_id: @provider.id, json_content: params[:json_content] || default_json_content})
202217
set_created_at_if_set params[:created_at], :pact_publications, {id: @pact.id}
203218
set_created_at_if_set params[:created_at], :pact_versions, {sha: @pact.pact_version_sha}
@@ -207,6 +222,7 @@ def create_pact params = {}
207222
end
208223

209224
def republish_same_pact params = {}
225+
params.delete(:comment)
210226
last_pact_version = PactBroker::Pacts::PactVersion.order(:id).last
211227
create_pact json_content: last_pact_version.content
212228
self
@@ -220,6 +236,7 @@ def revise_pact json_content = nil
220236
end
221237

222238
def create_webhook params = {}
239+
params.delete(:comment)
223240
uuid = params[:uuid] || PactBroker::Webhooks::Service.next_uuid
224241
event_params = params[:events] || [{ name: PactBroker::Webhooks::WebhookEvent::DEFAULT_EVENT_NAME }]
225242
events = event_params.collect{ |e| PactBroker::Webhooks::WebhookEvent.new(e) }
@@ -230,6 +247,7 @@ def create_webhook params = {}
230247
end
231248

232249
def create_triggered_webhook params = {}
250+
params.delete(:comment)
233251
trigger_uuid = params[:trigger_uuid] || webhook_service.next_uuid
234252
@triggered_webhook = webhook_repository.create_triggered_webhook trigger_uuid, @webhook, @pact, PactBroker::Webhooks::Service::RESOURCE_CREATION
235253
@triggered_webhook.update(status: params[:status]) if params[:status]
@@ -238,6 +256,7 @@ def create_triggered_webhook params = {}
238256
end
239257

240258
def create_webhook_execution params = {}
259+
params.delete(:comment)
241260
logs = params[:logs] || "logs"
242261
webhook_execution_result = PactBroker::Domain::WebhookExecutionResult.new(OpenStruct.new(code: "200"), logs, nil)
243262
@webhook_execution = PactBroker::Webhooks::Repository.new.create_execution @triggered_webhook, webhook_execution_result
@@ -248,6 +267,7 @@ def create_webhook_execution params = {}
248267
end
249268

250269
def create_deprecated_webhook_execution params = {}
270+
params.delete(:comment)
251271
create_webhook_execution params
252272
Sequel::Model.db[:webhook_executions].where(id: webhook_execution.id).update(
253273
triggered_webhook_id: nil,
@@ -260,6 +280,7 @@ def create_deprecated_webhook_execution params = {}
260280
end
261281

262282
def create_verification parameters = {}
283+
parameters.delete(:comment)
263284
tag_names = [parameters.delete(:tag_names), parameters.delete(:tag_name)].flatten.compact
264285
provider_version_number = parameters[:provider_version] || '4.5.6'
265286
default_parameters = {success: true, number: 1, test_results: {some: 'results'}}
@@ -278,6 +299,7 @@ def create_verification parameters = {}
278299
end
279300

280301
def create_certificate options = {path: 'spec/fixtures/single-certificate.pem'}
302+
options.delete(:comment)
281303
PactBroker::Certificates::Certificate.create(uuid: SecureRandom.urlsafe_base64, content: File.read(options[:path]))
282304
self
283305
end

0 commit comments

Comments
 (0)