Skip to content

Commit ddec810

Browse files
committed
fix: delete associated verification results when a pacticipant version is deleted
Closes: pact-foundation#219
1 parent eda8cbf commit ddec810

File tree

5 files changed

+38
-3
lines changed

5 files changed

+38
-3
lines changed

lib/pact_broker/verifications/repository.rb

+4
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ def find_latest_verification_for_tags consumer_name, provider_name, consumer_ver
9898
).limit(1).single_record
9999
end
100100

101+
def delete_by_provider_version_id version_id
102+
PactBroker::Domain::Verification.where(provider_version_id: version_id).delete
103+
end
104+
101105
def pact_version_id_for pact
102106
PactBroker::Pacts::PactPublication.select(:pact_version_id).where(id: pact.id)
103107
end

lib/pact_broker/versions/service.rb

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def self.find_by_pacticipant_name_and_latest_tag(pacticipant_name, tag)
2222
def self.delete version
2323
tag_repository.delete_by_version_id version.id
2424
pact_repository.delete_by_version_id version.id
25+
verification_repository.delete_by_provider_version_id version.id
2526
version_repository.delete_by_id version.id
2627
end
2728
end

spec/lib/pact_broker/verifications/repository_spec.rb

+20
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,26 @@ module Verifications
275275
end
276276
end
277277
end
278+
279+
describe "delete_by_provider_version_id" do
280+
let!(:provider_version) do
281+
TestDataBuilder.new
282+
.create_consumer
283+
.create_provider
284+
.create_consumer_version
285+
.create_pact
286+
.create_verification(provider_version: "1.0.0")
287+
.create_verification(provider_version: "2.0.0", number: 2)
288+
.create_verification(provider_version: "2.0.0", number: 3)
289+
.and_return(:provider_version)
290+
end
291+
292+
subject { Repository.new.delete_by_provider_version_id(provider_version.id) }
293+
294+
it "deletes the verifications associated with the given version id" do
295+
expect { subject }.to change { PactBroker::Domain::Verification.count }.by(-2)
296+
end
297+
end
278298
end
279299
end
280300
end

spec/lib/pact_broker/versions/service_spec.rb

+9-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ module PactBroker
55
module Versions
66
describe Service do
77
describe ".delete" do
8+
let(:td) { TestDataBuilder.new }
89
let!(:version) do
9-
TestDataBuilder.new
10+
td
1011
.create_consumer
1112
.create_provider
1213
.create_consumer_version("1.2.3")
1314
.create_consumer_version_tag("prod")
1415
.create_pact
16+
.create_verification(provider_version: "1.0.0")
1517
.and_return(:consumer_version)
1618
end
1719

@@ -28,6 +30,12 @@ module Versions
2830
it "deletes the version" do
2931
expect{ subject }.to change { PactBroker::Domain::Version.count }.by(-1)
3032
end
33+
34+
context "when deleting a provider version" do
35+
it "deletes associated verifications" do
36+
expect { Service.delete(td.provider_version ) }. to change { PactBroker::Domain::Verification.count }.by(-1)
37+
end
38+
end
3139
end
3240
end
3341
end

spec/support/test_data_builder.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class TestDataBuilder
3434
attr_reader :consumer
3535
attr_reader :provider
3636
attr_reader :consumer_version
37+
attr_reader :provider_version
3738
attr_reader :pact
3839
attr_reader :verification
3940
attr_reader :webhook
@@ -320,10 +321,11 @@ def create_verification parameters = {}
320321
parameters.delete(:provider_version)
321322
verification = PactBroker::Domain::Verification.new(parameters)
322323
@verification = PactBroker::Verifications::Repository.new.create(verification, provider_version_number, @pact)
324+
@provider_version = PactBroker::Domain::Version.where(pacticipant_id: @provider.id, number: provider_version_number).single_record
325+
323326
if tag_names.any?
324-
provider_version = PactBroker::Domain::Version.where(pacticipant_id: @provider.id, number: provider_version_number).single_record
325327
tag_names.each do | tag_name |
326-
PactBroker::Domain::Tag.create(name: tag_name, version: provider_version)
328+
PactBroker::Domain::Tag.create(name: tag_name, version: @provider_version)
327329
end
328330
end
329331
refresh_matrix

0 commit comments

Comments
 (0)