Skip to content

Commit 5ccdd31

Browse files
committed
fix: set consumer and provider relationships when a webhook is created and consumer/provider are set in the body of the request rather than the URL
Fixes: pact-foundation#331
1 parent 9ff7bbe commit 5ccdd31

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

lib/pact_broker/webhooks/repository.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class Repository
1717
include Repositories
1818

1919
def create uuid, webhook, consumer, provider
20+
consumer = pacticipant_repository.find_by_name(webhook.consumer.name) if webhook.consumer
21+
provider = pacticipant_repository.find_by_name(webhook.provider.name) if webhook.provider
2022
db_webhook = Webhook.from_domain webhook, consumer, provider
2123
db_webhook.uuid = uuid
2224
db_webhook.save

spec/features/create_webhook_spec.rb

+11
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,19 @@
108108
context "with a UUID" do
109109
let(:path) { "/webhooks/1234123412341234" }
110110

111+
before do
112+
webhook_hash[:provider] = { name: "Some Provider" }
113+
webhook_hash[:consumer] = { name: "Some Consumer" }
114+
end
115+
111116
subject { put(path, webhook_json, headers) }
112117

113118
its(:status) { is_expected.to be 201 }
119+
120+
it "is expected to have a consumer and provider" do
121+
subject
122+
expect(PactBroker::Webhooks::Webhook.first.consumer).to_not be nil
123+
expect(PactBroker::Webhooks::Webhook.first.provider).to_not be nil
124+
end
114125
end
115126
end

spec/lib/pact_broker/webhooks/repository_spec.rb

+14-6
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
module PactBroker
55
module Webhooks
66
describe Repository do
7-
8-
let(:td) { TestDataBuilder.new }
97
let(:url) { 'http://example.org' }
108
let(:body) { {'some' => 'json' } }
119
let(:headers) { {'Content-Type' => 'application/json', 'Accept' => 'application/json'} }
@@ -22,9 +20,9 @@ module Webhooks
2220
PactBroker::Webhooks::WebhookEvent.new(name: 'something_happened')
2321
end
2422
let(:events) { [event]}
25-
let(:webhook) { Domain::Webhook.new(request: request, events: events)}
26-
let(:consumer) { td.create_pacticipant 'Consumer'; td.pacticipant}
27-
let(:provider) { td.create_pacticipant 'Provider'; td.pacticipant}
23+
let(:webhook) { Domain::Webhook.new(request: request, events: events) }
24+
let(:consumer) { td.create_pacticipant('Consumer').and_return(:pacticipant) }
25+
let(:provider) { td.create_pacticipant('Provider').and_return(:pacticipant) }
2826
let(:uuid) { 'the-uuid' }
2927
let(:created_webhook_record) { ::DB::PACT_BROKER_DB[:webhooks].order(:id).last }
3028
let(:created_events) { ::DB::PACT_BROKER_DB[:webhook_events].where(webhook_id: created_webhook_record[:id]).order(:name).all }
@@ -57,10 +55,20 @@ module Webhooks
5755
it "saves the webhook events" do
5856
expect(subject.events.first[:name]).to eq "something_happened"
5957
end
58+
59+
context "when consumer and provider domain objects are set on the object rather than passed in" do
60+
let(:webhook) { Domain::Webhook.new(request: request, events: events, consumer: consumer, provider: provider) }
61+
62+
subject { Repository.new.create(uuid, webhook, nil, nil) }
63+
64+
it "sets the consumer and provider relationships" do
65+
expect(subject.consumer.id).to eq consumer.id
66+
expect(subject.provider.id).to eq provider.id
67+
end
68+
end
6069
end
6170

6271
describe "delete_by_uuid" do
63-
6472
before do
6573
Repository.new.create uuid, webhook, consumer, provider
6674
Repository.new.create 'another-uuid', webhook, consumer, provider

0 commit comments

Comments
 (0)