pact_broker-client 1.23.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +27 -0
- data/README.md +87 -14
- data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +160 -0
- data/lib/pact_broker/client/cli/broker.rb +71 -54
- data/lib/pact_broker/client/cli/can_i_deploy_long_desc.txt +23 -7
- data/lib/pact_broker/client/cli/create_or_update_webhook_long_desc.txt +1 -0
- data/lib/pact_broker/client/cli/custom_thor.rb +30 -0
- data/lib/pact_broker/client/version.rb +1 -1
- data/lib/pact_broker/client/webhooks/create.rb +20 -7
- data/spec/lib/pact_broker/client/cli/broker_create_or_update_webhook_spec.rb +23 -0
- data/spec/lib/pact_broker/client/cli/broker_create_webhook_spec.rb +2 -170
- data/spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb +210 -0
- data/spec/lib/pact_broker/client/cli/custom_thor_spec.rb +11 -0
- data/spec/lib/pact_broker/client/webhooks/create_spec.rb +16 -6
- data/spec/pacts/pact_broker_client-pact_broker.json +168 -0
- data/spec/service_providers/pact_helper.rb +21 -0
- data/spec/service_providers/webhooks_create_spec.rb +54 -5
- metadata +8 -3
@@ -27,6 +27,12 @@ module PactBroker::Client::CLI
|
|
27
27
|
Delegate.call(options)
|
28
28
|
end
|
29
29
|
|
30
|
+
desc '', ''
|
31
|
+
ignored_and_hidden_potential_options_from_environment_variables
|
32
|
+
def test_without_parameters
|
33
|
+
Delegate.call(options)
|
34
|
+
end
|
35
|
+
|
30
36
|
default_command :test_default
|
31
37
|
end
|
32
38
|
|
@@ -65,6 +71,11 @@ module PactBroker::Client::CLI
|
|
65
71
|
end
|
66
72
|
TestThor.start(%w{test_using_env_vars --broker-base-url http://bar})
|
67
73
|
end
|
74
|
+
|
75
|
+
it "allows commands to be called that don't use the environment variables" do
|
76
|
+
expect(Delegate).to receive(:call)
|
77
|
+
TestThor.start(%w{test_without_parameters})
|
78
|
+
end
|
68
79
|
end
|
69
80
|
|
70
81
|
describe ".turn_muliple_tag_options_into_array" do
|
@@ -18,10 +18,6 @@ module PactBroker
|
|
18
18
|
stub_request(:get, "http://broker").with(headers: { "Authorization" => /.*/}).to_return(status: 200, body: index_body, headers: { "Content-Type" => "application/hal+json" } )
|
19
19
|
end
|
20
20
|
|
21
|
-
let!(:webhook_request) do
|
22
|
-
stub_request(:post, "http://broker/webhooks").to_return(status: 405)
|
23
|
-
end
|
24
|
-
|
25
21
|
let(:params) do
|
26
22
|
{
|
27
23
|
http_method: "POST",
|
@@ -44,8 +40,22 @@ module PactBroker
|
|
44
40
|
subject { Create.call(params, "http://broker", pact_broker_client_options) }
|
45
41
|
|
46
42
|
context "when a 405 is returned from the webhook creation request" do
|
47
|
-
|
48
|
-
|
43
|
+
let!(:webhook_request) do
|
44
|
+
stub_request(:post, "http://broker/webhooks").to_return(status: 405)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns a result with success=false and a message" do
|
48
|
+
expect(subject.success).to be false
|
49
|
+
expect(subject.message).to eq Create::WEBHOOKS_WITH_OPTIONAL_PACTICICPANTS_NOT_SUPPORTED
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when a UUID is specified and index does not contain a pb:webhook relation" do
|
54
|
+
subject { Create.call(params.merge(uuid: 'some-uuid'), "http://broker", pact_broker_client_options) }
|
55
|
+
|
56
|
+
it "returns a result with success=false and a message" do
|
57
|
+
expect(subject.success).to be false
|
58
|
+
expect(subject.message).to eq Create::CREATING_WEBHOOK_WITH_UUID_NOT_SUPPORTED
|
49
59
|
end
|
50
60
|
end
|
51
61
|
|
@@ -1260,6 +1260,7 @@
|
|
1260
1260
|
"Accept": "application/hal+json"
|
1261
1261
|
},
|
1262
1262
|
"body": {
|
1263
|
+
"description": "a webhook",
|
1263
1264
|
"events": [
|
1264
1265
|
{
|
1265
1266
|
"name": "contract_content_changed"
|
@@ -1304,6 +1305,74 @@
|
|
1304
1305
|
}
|
1305
1306
|
}
|
1306
1307
|
},
|
1308
|
+
{
|
1309
|
+
"description": "a request to create a webhook with every possible event type",
|
1310
|
+
"providerState": "the 'Pricing Service' and 'Condor' already exist in the pact-broker",
|
1311
|
+
"request": {
|
1312
|
+
"method": "post",
|
1313
|
+
"path": "/webhooks/provider/Pricing%20Service/consumer/Condor",
|
1314
|
+
"headers": {
|
1315
|
+
"Content-Type": "application/json",
|
1316
|
+
"Accept": "application/hal+json"
|
1317
|
+
},
|
1318
|
+
"body": {
|
1319
|
+
"description": "a webhook",
|
1320
|
+
"events": [
|
1321
|
+
{
|
1322
|
+
"name": "contract_content_changed"
|
1323
|
+
},
|
1324
|
+
{
|
1325
|
+
"name": "contract_published"
|
1326
|
+
},
|
1327
|
+
{
|
1328
|
+
"name": "provider_verification_published"
|
1329
|
+
},
|
1330
|
+
{
|
1331
|
+
"name": "provider_verification_succeeded"
|
1332
|
+
},
|
1333
|
+
{
|
1334
|
+
"name": "provider_verification_failed"
|
1335
|
+
}
|
1336
|
+
],
|
1337
|
+
"request": {
|
1338
|
+
"url": "https://webhook",
|
1339
|
+
"method": "POST",
|
1340
|
+
"headers": {
|
1341
|
+
"Foo": "bar",
|
1342
|
+
"Bar": "foo"
|
1343
|
+
},
|
1344
|
+
"body": {
|
1345
|
+
"some": "body"
|
1346
|
+
},
|
1347
|
+
"username": "username",
|
1348
|
+
"password": "password"
|
1349
|
+
}
|
1350
|
+
}
|
1351
|
+
},
|
1352
|
+
"response": {
|
1353
|
+
"status": 201,
|
1354
|
+
"headers": {
|
1355
|
+
"Content-Type": "application/hal+json;charset=utf-8"
|
1356
|
+
},
|
1357
|
+
"body": {
|
1358
|
+
"_links": {
|
1359
|
+
"self": {
|
1360
|
+
"href": "http://localhost:1234/some-url",
|
1361
|
+
"title": "A title"
|
1362
|
+
}
|
1363
|
+
}
|
1364
|
+
},
|
1365
|
+
"matchingRules": {
|
1366
|
+
"$.body._links.self.href": {
|
1367
|
+
"match": "regex",
|
1368
|
+
"regex": "http:\\/\\/.*"
|
1369
|
+
},
|
1370
|
+
"$.body._links.self.title": {
|
1371
|
+
"match": "type"
|
1372
|
+
}
|
1373
|
+
}
|
1374
|
+
}
|
1375
|
+
},
|
1307
1376
|
{
|
1308
1377
|
"description": "a request to create a webhook with a non-JSON body for a consumer and provider",
|
1309
1378
|
"providerState": "the 'Pricing Service' and 'Condor' already exist in the pact-broker",
|
@@ -1315,6 +1384,7 @@
|
|
1315
1384
|
"Accept": "application/hal+json"
|
1316
1385
|
},
|
1317
1386
|
"body": {
|
1387
|
+
"description": "a webhook",
|
1318
1388
|
"events": [
|
1319
1389
|
{
|
1320
1390
|
"name": "contract_content_changed"
|
@@ -1368,6 +1438,7 @@
|
|
1368
1438
|
"Accept": "application/hal+json"
|
1369
1439
|
},
|
1370
1440
|
"body": {
|
1441
|
+
"description": "a webhook",
|
1371
1442
|
"events": [
|
1372
1443
|
{
|
1373
1444
|
"name": "contract_content_changed"
|
@@ -1421,6 +1492,7 @@
|
|
1421
1492
|
"Accept": "application/hal+json"
|
1422
1493
|
},
|
1423
1494
|
"body": {
|
1495
|
+
"description": "a webhook",
|
1424
1496
|
"events": [
|
1425
1497
|
{
|
1426
1498
|
"name": "contract_content_changed"
|
@@ -1488,6 +1560,7 @@
|
|
1488
1560
|
"Accept": "application/hal+json"
|
1489
1561
|
},
|
1490
1562
|
"body": {
|
1563
|
+
"description": "a webhook",
|
1491
1564
|
"events": [
|
1492
1565
|
{
|
1493
1566
|
"name": "contract_content_changed"
|
@@ -1545,6 +1618,7 @@
|
|
1545
1618
|
"Accept": "application/hal+json"
|
1546
1619
|
},
|
1547
1620
|
"body": {
|
1621
|
+
"description": "a webhook",
|
1548
1622
|
"events": [
|
1549
1623
|
{
|
1550
1624
|
"name": "contract_content_changed"
|
@@ -1601,6 +1675,7 @@
|
|
1601
1675
|
"Accept": "application/hal+json"
|
1602
1676
|
},
|
1603
1677
|
"body": {
|
1678
|
+
"description": "a webhook",
|
1604
1679
|
"events": [
|
1605
1680
|
{
|
1606
1681
|
"name": "contract_content_changed"
|
@@ -1658,6 +1733,7 @@
|
|
1658
1733
|
"Accept": "application/hal+json"
|
1659
1734
|
},
|
1660
1735
|
"body": {
|
1736
|
+
"description": "a webhook",
|
1661
1737
|
"events": [
|
1662
1738
|
{
|
1663
1739
|
"name": "contract_content_changed"
|
@@ -1701,6 +1777,98 @@
|
|
1701
1777
|
}
|
1702
1778
|
}
|
1703
1779
|
}
|
1780
|
+
},
|
1781
|
+
{
|
1782
|
+
"description": "a request for the index resource with the webhook relation",
|
1783
|
+
"request": {
|
1784
|
+
"method": "get",
|
1785
|
+
"path": "/",
|
1786
|
+
"headers": {
|
1787
|
+
"Accept": "application/hal+json"
|
1788
|
+
}
|
1789
|
+
},
|
1790
|
+
"response": {
|
1791
|
+
"status": 200,
|
1792
|
+
"headers": {
|
1793
|
+
"Content-Type": "application/hal+json;charset=utf-8"
|
1794
|
+
},
|
1795
|
+
"body": {
|
1796
|
+
"_links": {
|
1797
|
+
"pb:webhook": {
|
1798
|
+
"href": "http://localhost:1234/webhooks/{uuid}",
|
1799
|
+
"templated": true
|
1800
|
+
}
|
1801
|
+
}
|
1802
|
+
},
|
1803
|
+
"matchingRules": {
|
1804
|
+
"$.body._links.pb:webhook.href": {
|
1805
|
+
"match": "regex",
|
1806
|
+
"regex": "http:\\/\\/.*\\/webhooks\\/{uuid}"
|
1807
|
+
}
|
1808
|
+
}
|
1809
|
+
}
|
1810
|
+
},
|
1811
|
+
{
|
1812
|
+
"description": "a request to create a webhook with a JSON body and a uuid",
|
1813
|
+
"providerState": "the 'Pricing Service' and 'Condor' already exist in the pact-broker",
|
1814
|
+
"request": {
|
1815
|
+
"method": "put",
|
1816
|
+
"path": "/webhooks/696c5f93-1b7f-44bc-8d03-59440fcaa9a0",
|
1817
|
+
"headers": {
|
1818
|
+
"Content-Type": "application/json",
|
1819
|
+
"Accept": "application/hal+json"
|
1820
|
+
},
|
1821
|
+
"body": {
|
1822
|
+
"description": "a webhook",
|
1823
|
+
"events": [
|
1824
|
+
{
|
1825
|
+
"name": "contract_content_changed"
|
1826
|
+
}
|
1827
|
+
],
|
1828
|
+
"request": {
|
1829
|
+
"url": "https://webhook",
|
1830
|
+
"method": "POST",
|
1831
|
+
"headers": {
|
1832
|
+
"Foo": "bar",
|
1833
|
+
"Bar": "foo"
|
1834
|
+
},
|
1835
|
+
"body": {
|
1836
|
+
"some": "body"
|
1837
|
+
},
|
1838
|
+
"username": "username",
|
1839
|
+
"password": "password"
|
1840
|
+
},
|
1841
|
+
"provider": {
|
1842
|
+
"name": "Pricing Service"
|
1843
|
+
},
|
1844
|
+
"consumer": {
|
1845
|
+
"name": "Condor"
|
1846
|
+
}
|
1847
|
+
}
|
1848
|
+
},
|
1849
|
+
"response": {
|
1850
|
+
"status": 201,
|
1851
|
+
"headers": {
|
1852
|
+
"Content-Type": "application/hal+json;charset=utf-8"
|
1853
|
+
},
|
1854
|
+
"body": {
|
1855
|
+
"_links": {
|
1856
|
+
"self": {
|
1857
|
+
"href": "http://localhost:1234/some-url",
|
1858
|
+
"title": "A title"
|
1859
|
+
}
|
1860
|
+
}
|
1861
|
+
},
|
1862
|
+
"matchingRules": {
|
1863
|
+
"$.body._links.self.href": {
|
1864
|
+
"match": "regex",
|
1865
|
+
"regex": "http:\\/\\/.*"
|
1866
|
+
},
|
1867
|
+
"$.body._links.self.title": {
|
1868
|
+
"match": "type"
|
1869
|
+
}
|
1870
|
+
}
|
1871
|
+
}
|
1704
1872
|
}
|
1705
1873
|
],
|
1706
1874
|
"metadata": {
|
@@ -63,4 +63,25 @@ module PactBrokerPactHelperMethods
|
|
63
63
|
}
|
64
64
|
)
|
65
65
|
end
|
66
|
+
|
67
|
+
def mock_pact_broker_index_with_webhook_relation(context)
|
68
|
+
pact_broker
|
69
|
+
.upon_receiving("a request for the index resource with the webhook relation")
|
70
|
+
.with(
|
71
|
+
method: :get,
|
72
|
+
path: '/',
|
73
|
+
headers: context.get_request_headers).
|
74
|
+
will_respond_with(
|
75
|
+
status: 200,
|
76
|
+
headers: context.pact_broker_response_headers,
|
77
|
+
body: {
|
78
|
+
_links: {
|
79
|
+
:'pb:webhook' => {
|
80
|
+
href: Pact.term(pact_broker.mock_service_base_url + "/webhooks/{uuid}", %r{http://.*/webhooks/{uuid}}),
|
81
|
+
templated: true
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
)
|
86
|
+
end
|
66
87
|
end
|
@@ -6,8 +6,12 @@ RSpec.describe "creating a webhook", pact: true do
|
|
6
6
|
include_context "pact broker"
|
7
7
|
include PactBrokerPactHelperMethods
|
8
8
|
|
9
|
+
let(:event_names) { %w{contract_content_changed contract_published provider_verification_published provider_verification_succeeded provider_verification_failed} }
|
10
|
+
|
9
11
|
let(:params) do
|
10
12
|
{
|
13
|
+
description: "a webhook",
|
14
|
+
events: %w{contract_content_changed},
|
11
15
|
http_method: "POST",
|
12
16
|
url: "https://webhook",
|
13
17
|
headers: { "Foo" => "bar", "Bar" => "foo"},
|
@@ -15,8 +19,7 @@ RSpec.describe "creating a webhook", pact: true do
|
|
15
19
|
password: "password",
|
16
20
|
body: body,
|
17
21
|
consumer: "Condor",
|
18
|
-
provider: "Pricing Service"
|
19
|
-
events: ["contract_content_changed"]
|
22
|
+
provider: "Pricing Service"
|
20
23
|
}.tap { |it| Pact::Fixture.add_fixture(:create_webhook_params, it) }
|
21
24
|
end
|
22
25
|
|
@@ -24,10 +27,9 @@ RSpec.describe "creating a webhook", pact: true do
|
|
24
27
|
|
25
28
|
let(:request_body) do
|
26
29
|
{
|
30
|
+
"description" => "a webhook",
|
27
31
|
"events" => [
|
28
|
-
|
29
|
-
"name" => "contract_content_changed"
|
30
|
-
}
|
32
|
+
"name" => "contract_content_changed"
|
31
33
|
],
|
32
34
|
"request" => {
|
33
35
|
"url" => "https://webhook",
|
@@ -84,6 +86,27 @@ RSpec.describe "creating a webhook", pact: true do
|
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
89
|
+
context "when a valid webhook with every possible event type is sumbitted" do
|
90
|
+
before do
|
91
|
+
params.merge!(events: event_names)
|
92
|
+
request_body.merge!("events" => event_names.map{ |event_name| { "name" => event_name } })
|
93
|
+
|
94
|
+
pact_broker
|
95
|
+
.given("the 'Pricing Service' and 'Condor' already exist in the pact-broker")
|
96
|
+
.upon_receiving("a request to create a webhook with every possible event type")
|
97
|
+
.with(
|
98
|
+
method: :post,
|
99
|
+
path: '/webhooks/provider/Pricing%20Service/consumer/Condor',
|
100
|
+
headers: post_request_headers,
|
101
|
+
body: request_body)
|
102
|
+
.will_respond_with(success_response)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "returns a CommandResult with success = true" do
|
106
|
+
expect(subject.success).to be true
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
87
110
|
context "when a valid webhook with an XML body is submitted" do
|
88
111
|
before do
|
89
112
|
request_body["request"]["body"] = body
|
@@ -252,4 +275,30 @@ RSpec.describe "creating a webhook", pact: true do
|
|
252
275
|
expect(subject.success).to be true
|
253
276
|
end
|
254
277
|
end
|
278
|
+
|
279
|
+
context "when a uuid is specified" do
|
280
|
+
before do
|
281
|
+
params.merge!(uuid: uuid)
|
282
|
+
request_body["provider"] = { "name" => "Pricing Service" }
|
283
|
+
request_body["consumer"] = { "name" => "Condor" }
|
284
|
+
mock_pact_broker_index_with_webhook_relation(self)
|
285
|
+
|
286
|
+
pact_broker
|
287
|
+
.upon_receiving("a request to create a webhook with a JSON body and a uuid")
|
288
|
+
.given("the 'Pricing Service' and 'Condor' already exist in the pact-broker")
|
289
|
+
.with(
|
290
|
+
method: :put,
|
291
|
+
path: "/webhooks/#{uuid}",
|
292
|
+
headers: put_request_headers,
|
293
|
+
body: request_body)
|
294
|
+
.will_respond_with(success_response)
|
295
|
+
end
|
296
|
+
let(:uuid) { '696c5f93-1b7f-44bc-8d03-59440fcaa9a0' }
|
297
|
+
|
298
|
+
it "returns a CommandResult with success = true" do
|
299
|
+
expect(subject).to be_a PactBroker::Client::CommandResult
|
300
|
+
expect(subject.success).to be true
|
301
|
+
expect(subject.message).to eq "Webhook \"A title\" created"
|
302
|
+
end
|
303
|
+
end
|
255
304
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.24.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beth Skurrie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -199,6 +199,7 @@ files:
|
|
199
199
|
- lib/pact_broker/client/can_i_deploy.rb
|
200
200
|
- lib/pact_broker/client/cli/broker.rb
|
201
201
|
- lib/pact_broker/client/cli/can_i_deploy_long_desc.txt
|
202
|
+
- lib/pact_broker/client/cli/create_or_update_webhook_long_desc.txt
|
202
203
|
- lib/pact_broker/client/cli/create_webhook_long_desc.txt
|
203
204
|
- lib/pact_broker/client/cli/custom_thor.rb
|
204
205
|
- lib/pact_broker/client/cli/version_selector_options_parser.rb
|
@@ -244,8 +245,10 @@ files:
|
|
244
245
|
- spec/lib/pact_broker/client/base_client_spec.rb
|
245
246
|
- spec/lib/pact_broker/client/can_i_deploy_spec.rb
|
246
247
|
- spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb
|
248
|
+
- spec/lib/pact_broker/client/cli/broker_create_or_update_webhook_spec.rb
|
247
249
|
- spec/lib/pact_broker/client/cli/broker_create_webhook_spec.rb
|
248
250
|
- spec/lib/pact_broker/client/cli/broker_publish_spec.rb
|
251
|
+
- spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb
|
249
252
|
- spec/lib/pact_broker/client/cli/custom_thor_spec.rb
|
250
253
|
- spec/lib/pact_broker/client/cli/version_selector_options_parser_spec.rb
|
251
254
|
- spec/lib/pact_broker/client/git_spec.rb
|
@@ -309,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
309
312
|
version: '0'
|
310
313
|
requirements: []
|
311
314
|
rubyforge_project:
|
312
|
-
rubygems_version: 2.6
|
315
|
+
rubygems_version: 2.7.6
|
313
316
|
signing_key:
|
314
317
|
specification_version: 4
|
315
318
|
summary: See description
|
@@ -319,8 +322,10 @@ test_files:
|
|
319
322
|
- spec/lib/pact_broker/client/base_client_spec.rb
|
320
323
|
- spec/lib/pact_broker/client/can_i_deploy_spec.rb
|
321
324
|
- spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb
|
325
|
+
- spec/lib/pact_broker/client/cli/broker_create_or_update_webhook_spec.rb
|
322
326
|
- spec/lib/pact_broker/client/cli/broker_create_webhook_spec.rb
|
323
327
|
- spec/lib/pact_broker/client/cli/broker_publish_spec.rb
|
328
|
+
- spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb
|
324
329
|
- spec/lib/pact_broker/client/cli/custom_thor_spec.rb
|
325
330
|
- spec/lib/pact_broker/client/cli/version_selector_options_parser_spec.rb
|
326
331
|
- spec/lib/pact_broker/client/git_spec.rb
|