Skip to content

Commit 70392e5

Browse files
committed
feat: support DELETE for verification results
1 parent e0dae2c commit 70392e5

File tree

5 files changed

+48
-1
lines changed

5 files changed

+48
-1
lines changed

lib/pact_broker/api/resources/verification.rb

+6-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def content_types_provided
2020
# Remember to update latest_verification_id_for_pact_version_and_provider_version
2121
# if/when DELETE is implemented
2222
def allowed_methods
23-
["GET", "OPTIONS"]
23+
["GET", "OPTIONS", "DELETE"]
2424
end
2525

2626
def resource_exists?
@@ -40,6 +40,11 @@ def to_extended_json
4040
extended_decorator_for(verification).to_json(user_options: { base_url: base_url })
4141
end
4242

43+
def delete_resource
44+
verification_service.delete(verification)
45+
true
46+
end
47+
4348
private
4449

4550
def verification

lib/pact_broker/verifications/repository.rb

+4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ def create verification, provider_version_number, pact
3333
verification
3434
end
3535

36+
def delete(verification_id)
37+
PactBroker::Domain::Verification.where(id: verification_id).delete
38+
end
39+
3640
def update_latest_verification_id verification
3741
params = {
3842
pact_version_id: verification.pact_version_id,

lib/pact_broker/verifications/service.rb

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ def create next_verification_number, params, pact, webhook_options
3939
verification
4040
end
4141

42+
def delete(verification)
43+
webhook_service.delete_all_webhook_related_objects_by_verification_ids(verification.id)
44+
verification_repository.delete(verification.id)
45+
end
46+
4247
def errors params
4348
contract = PactBroker::Api::Contracts::VerificationContract.new(PactBroker::Domain::Verification.new)
4449
contract.validate(params)

lib/pact_broker/webhooks/service.rb

+4
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ def self.delete_all_webhook_related_objects_by_pact_publication_ids pact_publica
6868
webhook_repository.delete_triggered_webhooks_by_pact_publication_ids pact_publication_ids
6969
end
7070

71+
def self.delete_all_webhook_related_objects_by_verification_ids verification_ids
72+
webhook_repository.delete_triggered_webhooks_by_verification_ids verification_ids
73+
end
74+
7175
def self.find_all
7276
webhook_repository.find_all
7377
end
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require 'support/test_data_builder'
2+
require 'pact_broker/api/pact_broker_urls'
3+
4+
5+
describe "Delete a verification" do
6+
7+
let!(:verification) do
8+
TestDataBuilder.new
9+
.create_pact_with_verification("Foo", "1", "Bar", "2")
10+
.create_provider_webhook(event_names: ['provider_verification_published'])
11+
.create_triggered_webhook
12+
.create_webhook_execution
13+
.and_return(:verification)
14+
end
15+
16+
let(:path) { PactBroker::Api::PactBrokerUrls.verification_url(verification, "") }
17+
let(:response_body) { JSON.parse(last_response.body, symbolize_names: true)}
18+
19+
subject { delete(path) }
20+
21+
it "deletes the verification" do
22+
expect { subject }.to change { PactBroker::Domain::Verification.count }.by(-1)
23+
end
24+
25+
it "returns a 204 response" do
26+
subject
27+
expect(last_response.status).to eq 204
28+
end
29+
end

0 commit comments

Comments
 (0)