pact_broker-client 1.25.0 → 1.27.2

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/trigger_pact_cli_release.yml +15 -0
  3. data/.github/workflows/trigger_pact_docs_update.yml +21 -0
  4. data/CHANGELOG.md +55 -0
  5. data/Gemfile +6 -1
  6. data/README.md +4 -3
  7. data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +234 -10
  8. data/lib/pact_broker/client/can_i_deploy.rb +6 -0
  9. data/lib/pact_broker/client/cli/broker.rb +33 -0
  10. data/lib/pact_broker/client/cli/custom_thor.rb +36 -14
  11. data/lib/pact_broker/client/git.rb +2 -1
  12. data/lib/pact_broker/client/hal/entity.rb +13 -4
  13. data/lib/pact_broker/client/hal/http_client.rb +6 -0
  14. data/lib/pact_broker/client/hal/link.rb +5 -1
  15. data/lib/pact_broker/client/hal_client_methods.rb +15 -0
  16. data/lib/pact_broker/client/matrix/resource.rb +5 -1
  17. data/lib/pact_broker/client/pacticipants/create.rb +57 -0
  18. data/lib/pact_broker/client/pacts/list_latest_versions.rb +65 -0
  19. data/lib/pact_broker/client/publish_pacts.rb +1 -1
  20. data/lib/pact_broker/client/version.rb +1 -1
  21. data/lib/pact_broker/client/webhooks/create.rb +7 -1
  22. data/lib/pact_broker/client/webhooks/test.rb +16 -0
  23. data/pact-broker-client.gemspec +3 -4
  24. data/spec/integration/can_i_deploy_spec.rb +3 -3
  25. data/spec/integration/create_version_tag_spec.rb +2 -3
  26. data/spec/lib/pact_broker/client/can_i_deploy_spec.rb +22 -4
  27. data/spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb +2 -0
  28. data/spec/lib/pact_broker/client/cli/custom_thor_spec.rb +6 -0
  29. data/spec/lib/pact_broker/client/hal/entity_spec.rb +1 -0
  30. data/spec/lib/pact_broker/client/pacticipants/create_spec.rb +28 -0
  31. data/spec/lib/pact_broker/client/webhooks/create_spec.rb +22 -0
  32. data/spec/pacts/pact_broker_client-pact_broker.json +273 -10
  33. data/spec/service_providers/pact_broker_client_matrix_spec.rb +10 -10
  34. data/spec/service_providers/pact_helper.rb +29 -0
  35. data/spec/service_providers/pacticipants_create_spec.rb +118 -0
  36. data/spec/service_providers/webhooks_create_spec.rb +46 -17
  37. metadata +25 -30
@@ -1,5 +1,5 @@
1
1
  module PactBroker
2
2
  module Client
3
- VERSION = '1.25.0'
3
+ VERSION = '1.27.2'
4
4
  end
5
5
  end
@@ -101,7 +101,13 @@ module PactBroker
101
101
  end
102
102
 
103
103
  def success_result(webhook_entity)
104
- CommandResult.new(true, "Webhook #{webhook_entity._link('self').title_or_name.inspect} created")
104
+ action = webhook_entity.response.status == 201 ? "created" : "updated"
105
+ name = if webhook_entity.description && webhook_entity.description.size > 0
106
+ webhook_entity.description
107
+ else
108
+ webhook_entity._link('self').title_or_name
109
+ end
110
+ CommandResult.new(true, "Webhook #{name.inspect} #{action}")
105
111
  end
106
112
 
107
113
  def error_result(message)
@@ -0,0 +1,16 @@
1
+ require 'pact_broker/client/hal'
2
+ require 'pact_broker/client/command_result'
3
+
4
+ module PactBroker
5
+ module Client
6
+ module Webhooks
7
+ class Test
8
+ def self.call(options, pact_broker_client_options)
9
+ http_client = PactBroker::Client::Hal::HttpClient.new(pact_broker_client_options.merge(pact_broker_client_options[:basic_auth] || {}))
10
+ execution_result = PactBroker::Client::Hal::EntryPoint.new(options.broker_base_url, http_client).get!._link!('pb:webhook').expand('uuid' => options.uuid).get!.post('pb:execute')
11
+ PactBroker::Client::CommandResult.new(true, execution_result.response.body['logs'])
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -21,12 +21,11 @@ Gem::Specification.new do |gem|
21
21
  gem.require_paths = ["lib"]
22
22
  gem.license = 'MIT'
23
23
 
24
- gem.add_runtime_dependency 'httparty'
25
- gem.add_runtime_dependency 'json'
26
- gem.add_runtime_dependency 'term-ansicolor'
24
+ gem.add_runtime_dependency 'httparty', '~>0.18'
25
+ gem.add_runtime_dependency 'term-ansicolor', '~> 1.7'
27
26
  gem.add_runtime_dependency 'table_print', '~> 1.5'
28
27
  gem.add_runtime_dependency 'thor', '~> 0.20'
29
- gem.add_runtime_dependency 'rake' #For FileList
28
+ gem.add_runtime_dependency 'rake', '~> 13.0' #For FileList
30
29
 
31
30
  gem.add_development_dependency 'fakefs', '~> 0.4'
32
31
  gem.add_development_dependency 'webmock', '~> 3.0'
@@ -1,7 +1,7 @@
1
- describe "pact-broker can-i-deploy", skip_windows: true, skip_ci: true do
1
+ describe "pact-broker can-i-deploy", skip_windows: true do
2
2
  before(:all) do
3
- @pipe = IO.popen("bundle exec pact-stub-service spec/pacts/pact_broker_client-pact_broker.json -p 5000")
4
- sleep 2
3
+ @pipe = IO.popen("bundle exec pact-stub-service spec/pacts/pact_broker_client-pact_broker.json -p 5000 --log tmp/pact-stub-can-i-deploy.log")
4
+ sleep 4
5
5
  end
6
6
 
7
7
  context "when the pacticipants can be deployed" do
@@ -1,7 +1,6 @@
1
- # Currently failing on Travis, skip for now
2
- describe "pact-broker create-version-tag", skip_windows: true, skip_ci: true do
1
+ describe "pact-broker create-version-tag", skip_windows: true do
3
2
  before(:all) do
4
- @pipe = IO.popen("bundle exec pact-stub-service spec/pacts/pact_broker_client-pact_broker.json -p 5001")
3
+ @pipe = IO.popen("bundle exec pact-stub-service spec/pacts/pact_broker_client-pact_broker.json -p 5001 --log tmp/pact-stub-service-create-verison-tag.log")
5
4
  sleep 2
6
5
  end
7
6
 
@@ -9,11 +9,19 @@ module PactBroker
9
9
  let(:matrix_options) { {} }
10
10
  let(:pact_broker_client_options) { { foo: 'bar' } }
11
11
  let(:matrix_client) { instance_double('PactBroker::Client::Matrix') }
12
- let(:matrix) { instance_double('Matrix::Resource', deployable?: true, reason: 'some reason', any_unknown?: any_unknown, supports_unknown_count?: supports_unknown_count) }
13
- let(:any_unknown) { false }
12
+ let(:matrix) do
13
+ instance_double('Matrix::Resource',
14
+ deployable?: true,
15
+ reason: 'some reason',
16
+ any_unknown?: any_unknown,
17
+ supports_unknown_count?: supports_unknown_count,
18
+ unknown_count: unknown_count)
19
+ end
20
+ let(:unknown_count) { 0 }
21
+ let(:any_unknown) { unknown_count > 0 }
14
22
  let(:supports_unknown_count) { true }
15
23
  let(:retry_while_unknown) { 0 }
16
- let(:options) { { output: 'text', retry_while_unknown: retry_while_unknown, retry_interval: 5} }
24
+ let(:options) { { output: 'text', retry_while_unknown: retry_while_unknown, retry_interval: 5 } }
17
25
 
18
26
 
19
27
  before do
@@ -76,7 +84,17 @@ module PactBroker
76
84
  end
77
85
 
78
86
  context "when any_unknown? is true" do
79
- let(:any_unknown) { true }
87
+ before do
88
+ allow($stderr).to receive(:puts)
89
+ allow(Retry).to receive(:until_truthy_or_max_times)
90
+ end
91
+
92
+ let(:unknown_count) { 1 }
93
+
94
+ it "puts a message to stderr" do
95
+ expect($stderr).to receive(:puts).with("Waiting for 1 verification result to be published (maximum of 5 seconds)")
96
+ subject
97
+ end
80
98
 
81
99
  it "retries the request" do
82
100
  expect(Retry).to receive(:until_truthy_or_max_times).with(hash_including(times: 1, sleep: 5, sleep_first: true))
@@ -22,6 +22,7 @@ module PactBroker
22
22
  let(:options_hash) do
23
23
  {
24
24
  uuid: '9999',
25
+ description: "some webhook",
25
26
  request: "POST",
26
27
  header: header,
27
28
  data: data,
@@ -39,6 +40,7 @@ module PactBroker
39
40
  let(:expected_params) do
40
41
  {
41
42
  uuid: '9999',
43
+ description: "some webhook",
42
44
  http_method: "POST",
43
45
  url: "http://webhook",
44
46
  headers: { "Foo" => "bar", "Bar" => "foo"},
@@ -109,6 +109,12 @@ module PactBroker::Client::CLI
109
109
  expect(TestThor.turn_muliple_tag_options_into_array(input)).to eq output
110
110
  end
111
111
 
112
+ it "turns '--tag=foo --tag=bar' into '--tag foo bar'" do
113
+ input = %w{--ignore this --tag=foo --tag=bar --wiffle --that}
114
+ output = %w{--ignore this --tag foo bar --wiffle --that }
115
+ expect(TestThor.turn_muliple_tag_options_into_array(input)).to eq output
116
+ end
117
+
112
118
  it "doesn't change anything when there are no duplicate options" do
113
119
  input = %w{--ignore this --taggy foo --blah bar --wiffle --that}
114
120
  expect(TestThor.turn_muliple_tag_options_into_array(input)).to eq input
@@ -17,6 +17,7 @@ module PactBroker::Client
17
17
  "name" => "Provider"
18
18
  }
19
19
  end
20
+
20
21
  let(:pact_hash) do
21
22
  {
22
23
  "name" => "a name",
@@ -0,0 +1,28 @@
1
+ require 'pact_broker/client/pacticipants/create'
2
+
3
+ module PactBroker
4
+ module Client
5
+ module Pacticipants2
6
+ describe Create do
7
+ describe ".call" do
8
+ let(:pact_broker_client_options) { {} }
9
+ let(:broker_base_url) { "http://url" }
10
+ let(:params) { { name: 'Foo' } }
11
+
12
+ subject { Create.call(params, broker_base_url, pact_broker_client_options)}
13
+
14
+ context "when there is an http error" do
15
+ let!(:index_request) do
16
+ stub_request(:get, broker_base_url).to_return(status: 500, body: 'some error', headers: { "Content-Type" => "application/hal+json" } )
17
+ end
18
+
19
+ it "returns a failure result" do
20
+ expect(subject.success).to be false
21
+ expect(subject.message).to include 'some error'
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -70,6 +70,28 @@ module PactBroker
70
70
  expect(subject.message).to match /"some":"error"/
71
71
  end
72
72
  end
73
+
74
+ context "when there is an empty description returned" do
75
+ let!(:webhook_request) do
76
+ stub_request(:post, "http://broker/webhooks").to_return(status: 200, body: response_body.to_json, headers: { "Content-Type" => "application/hal+json" })
77
+ end
78
+
79
+ let(:response_body) do
80
+ {
81
+ description: "",
82
+ _links: {
83
+ self: {
84
+ href: "href",
85
+ title: "the title"
86
+ }
87
+ }
88
+ }
89
+ end
90
+
91
+ it "uses the self title in the message instead" do
92
+ expect(subject.message).to include "the title"
93
+ end
94
+ end
73
95
  end
74
96
  end
75
97
  end
@@ -192,7 +192,7 @@
192
192
  "request": {
193
193
  "method": "get",
194
194
  "path": "/matrix",
195
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6&latestby=cvpv"
195
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&latestby=cvpv"
196
196
  },
197
197
  "response": {
198
198
  "status": 200,
@@ -242,7 +242,7 @@
242
242
  "request": {
243
243
  "method": "get",
244
244
  "path": "/matrix",
245
- "query": "q[][pacticipant]=Foo%20Thing&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6&latestby=cvpv"
245
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo%20Thing&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&latestby=cvpv"
246
246
  },
247
247
  "response": {
248
248
  "status": 200,
@@ -292,7 +292,7 @@
292
292
  "request": {
293
293
  "method": "get",
294
294
  "path": "/matrix",
295
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&latestby=cvp&latest=true"
295
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&latestby=cvp&latest=true"
296
296
  },
297
297
  "response": {
298
298
  "status": 200,
@@ -342,7 +342,7 @@
342
342
  "request": {
343
343
  "method": "get",
344
344
  "path": "/matrix",
345
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9&latestby=cvpv"
345
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=9.9.9&latestby=cvpv"
346
346
  },
347
347
  "response": {
348
348
  "status": 200,
@@ -366,7 +366,7 @@
366
366
  "request": {
367
367
  "method": "get",
368
368
  "path": "/matrix",
369
- "query": "q[][pacticipant]=Wiffle&q[][version]=1.2.3&q[][pacticipant]=Meep&q[][version]=9.9.9&latestby=cvpv"
369
+ "query": "q%5B%5D%5Bpacticipant%5D=Wiffle&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Meep&q%5B%5D%5Bversion%5D=9.9.9&latestby=cvpv"
370
370
  },
371
371
  "response": {
372
372
  "status": 400,
@@ -394,7 +394,7 @@
394
394
  "request": {
395
395
  "method": "get",
396
396
  "path": "/matrix",
397
- "query": "q[][pacticipant]=Foo&q[][pacticipant]=Bar&latestby=cvpv"
397
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bpacticipant%5D=Bar&latestby=cvpv"
398
398
  },
399
399
  "response": {
400
400
  "status": 200,
@@ -463,7 +463,7 @@
463
463
  "request": {
464
464
  "method": "get",
465
465
  "path": "/matrix",
466
- "query": "q[][pacticipant]=Foo&q[][pacticipant]=Bar&latestby=cvpv&success[]=true"
466
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bpacticipant%5D=Bar&latestby=cvpv&success%5B%5D=true"
467
467
  },
468
468
  "response": {
469
469
  "status": 200,
@@ -513,7 +513,7 @@
513
513
  "request": {
514
514
  "method": "get",
515
515
  "path": "/matrix",
516
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][latest]=true&q[][tag]=prod&latestby=cvpv"
516
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Blatest%5D=true&q%5B%5D%5Btag%5D=prod&latestby=cvpv"
517
517
  },
518
518
  "response": {
519
519
  "status": 200,
@@ -563,7 +563,7 @@
563
563
  "request": {
564
564
  "method": "get",
565
565
  "path": "/matrix",
566
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.4&q[][pacticipant]=Bar&q[][latest]=true&latestby=cvpv"
566
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.4&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Blatest%5D=true&latestby=cvpv"
567
567
  },
568
568
  "response": {
569
569
  "status": 200,
@@ -613,7 +613,7 @@
613
613
  "request": {
614
614
  "method": "get",
615
615
  "path": "/matrix",
616
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&latestby=cvp&latest=true&tag=prod"
616
+ "query": "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&latestby=cvp&latest=true&tag=prod"
617
617
  },
618
618
  "response": {
619
619
  "status": 200,
@@ -1249,6 +1249,161 @@
1249
1249
  }
1250
1250
  }
1251
1251
  },
1252
+ {
1253
+ "description": "a request for the index resource",
1254
+ "providerState": "the pacticipant relations are present",
1255
+ "request": {
1256
+ "method": "get",
1257
+ "path": "/",
1258
+ "headers": {
1259
+ "Accept": "application/hal+json"
1260
+ }
1261
+ },
1262
+ "response": {
1263
+ "status": 200,
1264
+ "headers": {
1265
+ "Content-Type": "application/hal+json;charset=utf-8"
1266
+ },
1267
+ "body": {
1268
+ "_links": {
1269
+ "pb:pacticipants": {
1270
+ "href": "http://localhost:1234/pacticipants"
1271
+ },
1272
+ "pb:pacticipant": {
1273
+ "href": "http://localhost:1234/pacticipants/{pacticipant}"
1274
+ }
1275
+ }
1276
+ },
1277
+ "matchingRules": {
1278
+ "$.body._links.pb:pacticipants.href": {
1279
+ "match": "regex",
1280
+ "regex": "http:\\/\\/.*"
1281
+ },
1282
+ "$.body._links.pb:pacticipant.href": {
1283
+ "match": "regex",
1284
+ "regex": "http:\\/\\/.*\\{pacticipant\\}"
1285
+ }
1286
+ }
1287
+ }
1288
+ },
1289
+ {
1290
+ "description": "a request to retrieve a pacticipant",
1291
+ "request": {
1292
+ "method": "get",
1293
+ "path": "/pacticipants/Foo",
1294
+ "headers": {
1295
+ "Accept": "application/hal+json"
1296
+ }
1297
+ },
1298
+ "response": {
1299
+ "status": 404,
1300
+ "headers": {
1301
+ }
1302
+ }
1303
+ },
1304
+ {
1305
+ "description": "a request to create a pacticipant",
1306
+ "request": {
1307
+ "method": "post",
1308
+ "path": "/pacticipants",
1309
+ "headers": {
1310
+ "Content-Type": "application/json",
1311
+ "Accept": "application/hal+json"
1312
+ },
1313
+ "body": {
1314
+ "name": "Foo",
1315
+ "repositoryUrl": "http://foo"
1316
+ }
1317
+ },
1318
+ "response": {
1319
+ "status": 201,
1320
+ "headers": {
1321
+ "Content-Type": "application/hal+json;charset=utf-8"
1322
+ },
1323
+ "body": {
1324
+ "name": "Foo",
1325
+ "repositoryUrl": "http://foo",
1326
+ "_links": {
1327
+ "self": {
1328
+ "href": "http://localhost:1234/pacticipants/Foo"
1329
+ }
1330
+ }
1331
+ },
1332
+ "matchingRules": {
1333
+ "$.body._links.self.href": {
1334
+ "match": "regex",
1335
+ "regex": "http:\\/\\/.*"
1336
+ }
1337
+ }
1338
+ }
1339
+ },
1340
+ {
1341
+ "description": "a request to retrieve a pacticipant",
1342
+ "providerState": "a pacticipant with name Foo exists",
1343
+ "request": {
1344
+ "method": "get",
1345
+ "path": "/pacticipants/Foo",
1346
+ "headers": {
1347
+ "Accept": "application/hal+json"
1348
+ }
1349
+ },
1350
+ "response": {
1351
+ "status": 200,
1352
+ "headers": {
1353
+ "Content-Type": "application/hal+json;charset=utf-8"
1354
+ },
1355
+ "body": {
1356
+ "_links": {
1357
+ "self": {
1358
+ "href": "http://localhost:1234/pacticipants/Foo"
1359
+ }
1360
+ }
1361
+ },
1362
+ "matchingRules": {
1363
+ "$.body._links.self.href": {
1364
+ "match": "regex",
1365
+ "regex": "http:\\/\\/.*"
1366
+ }
1367
+ }
1368
+ }
1369
+ },
1370
+ {
1371
+ "description": "a request to update a pacticipant",
1372
+ "providerState": "a pacticipant with name Foo exists",
1373
+ "request": {
1374
+ "method": "patch",
1375
+ "path": "/pacticipants/Foo",
1376
+ "headers": {
1377
+ "Content-Type": "application/json",
1378
+ "Accept": "application/hal+json"
1379
+ },
1380
+ "body": {
1381
+ "name": "Foo",
1382
+ "repositoryUrl": "http://foo"
1383
+ }
1384
+ },
1385
+ "response": {
1386
+ "status": 200,
1387
+ "headers": {
1388
+ "Content-Type": "application/hal+json;charset=utf-8"
1389
+ },
1390
+ "body": {
1391
+ "name": "Foo",
1392
+ "repositoryUrl": "http://foo",
1393
+ "_links": {
1394
+ "self": {
1395
+ "href": "http://localhost:1234/pacticipants/Foo"
1396
+ }
1397
+ }
1398
+ },
1399
+ "matchingRules": {
1400
+ "$.body._links.self.href": {
1401
+ "match": "regex",
1402
+ "regex": "http:\\/\\/.*"
1403
+ }
1404
+ }
1405
+ }
1406
+ },
1252
1407
  {
1253
1408
  "description": "a request to create a webhook with a JSON body for a consumer and provider",
1254
1409
  "providerState": "the 'Pricing Service' and 'Condor' already exist in the pact-broker",
@@ -1287,6 +1442,7 @@
1287
1442
  "Content-Type": "application/hal+json;charset=utf-8"
1288
1443
  },
1289
1444
  "body": {
1445
+ "description": "a webhook",
1290
1446
  "_links": {
1291
1447
  "self": {
1292
1448
  "href": "http://localhost:1234/some-url",
@@ -1295,6 +1451,9 @@
1295
1451
  }
1296
1452
  },
1297
1453
  "matchingRules": {
1454
+ "$.body.description": {
1455
+ "match": "type"
1456
+ },
1298
1457
  "$.body._links.self.href": {
1299
1458
  "match": "regex",
1300
1459
  "regex": "http:\\/\\/.*"
@@ -1355,6 +1514,7 @@
1355
1514
  "Content-Type": "application/hal+json;charset=utf-8"
1356
1515
  },
1357
1516
  "body": {
1517
+ "description": "a webhook",
1358
1518
  "_links": {
1359
1519
  "self": {
1360
1520
  "href": "http://localhost:1234/some-url",
@@ -1363,6 +1523,9 @@
1363
1523
  }
1364
1524
  },
1365
1525
  "matchingRules": {
1526
+ "$.body.description": {
1527
+ "match": "type"
1528
+ },
1366
1529
  "$.body._links.self.href": {
1367
1530
  "match": "regex",
1368
1531
  "regex": "http:\\/\\/.*"
@@ -1409,6 +1572,7 @@
1409
1572
  "Content-Type": "application/hal+json;charset=utf-8"
1410
1573
  },
1411
1574
  "body": {
1575
+ "description": "a webhook",
1412
1576
  "_links": {
1413
1577
  "self": {
1414
1578
  "href": "http://localhost:1234/some-url",
@@ -1417,6 +1581,9 @@
1417
1581
  }
1418
1582
  },
1419
1583
  "matchingRules": {
1584
+ "$.body.description": {
1585
+ "match": "type"
1586
+ },
1420
1587
  "$.body._links.self.href": {
1421
1588
  "match": "regex",
1422
1589
  "regex": "http:\\/\\/.*"
@@ -1538,6 +1705,12 @@
1538
1705
  "_links": {
1539
1706
  "pb:webhooks": {
1540
1707
  "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-WEBHOOKS"
1708
+ },
1709
+ "pb:pacticipants": {
1710
+ "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PACTICIPANTS"
1711
+ },
1712
+ "pb:pacticipant": {
1713
+ "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-{pacticipant}"
1541
1714
  }
1542
1715
  }
1543
1716
  },
@@ -1545,6 +1718,14 @@
1545
1718
  "$.body._links.pb:webhooks.href": {
1546
1719
  "match": "regex",
1547
1720
  "regex": "http:\\/\\/.*"
1721
+ },
1722
+ "$.body._links.pb:pacticipants.href": {
1723
+ "match": "regex",
1724
+ "regex": "http:\\/\\/.*"
1725
+ },
1726
+ "$.body._links.pb:pacticipant.href": {
1727
+ "match": "regex",
1728
+ "regex": "http:\\/\\/.*{pacticipant}"
1548
1729
  }
1549
1730
  }
1550
1731
  }
@@ -1590,6 +1771,7 @@
1590
1771
  "Content-Type": "application/hal+json;charset=utf-8"
1591
1772
  },
1592
1773
  "body": {
1774
+ "description": "a webhook",
1593
1775
  "_links": {
1594
1776
  "self": {
1595
1777
  "href": "http://localhost:1234/some-url",
@@ -1598,6 +1780,9 @@
1598
1780
  }
1599
1781
  },
1600
1782
  "matchingRules": {
1783
+ "$.body.description": {
1784
+ "match": "type"
1785
+ },
1601
1786
  "$.body._links.self.href": {
1602
1787
  "match": "regex",
1603
1788
  "regex": "http:\\/\\/.*"
@@ -1705,6 +1890,7 @@
1705
1890
  "Content-Type": "application/hal+json;charset=utf-8"
1706
1891
  },
1707
1892
  "body": {
1893
+ "description": "a webhook",
1708
1894
  "_links": {
1709
1895
  "self": {
1710
1896
  "href": "http://localhost:1234/some-url",
@@ -1713,6 +1899,9 @@
1713
1899
  }
1714
1900
  },
1715
1901
  "matchingRules": {
1902
+ "$.body.description": {
1903
+ "match": "type"
1904
+ },
1716
1905
  "$.body._links.self.href": {
1717
1906
  "match": "regex",
1718
1907
  "regex": "http:\\/\\/.*"
@@ -1760,6 +1949,7 @@
1760
1949
  "Content-Type": "application/hal+json;charset=utf-8"
1761
1950
  },
1762
1951
  "body": {
1952
+ "description": "a webhook",
1763
1953
  "_links": {
1764
1954
  "self": {
1765
1955
  "href": "http://localhost:1234/some-url",
@@ -1768,6 +1958,9 @@
1768
1958
  }
1769
1959
  },
1770
1960
  "matchingRules": {
1961
+ "$.body.description": {
1962
+ "match": "type"
1963
+ },
1771
1964
  "$.body._links.self.href": {
1772
1965
  "match": "regex",
1773
1966
  "regex": "http:\\/\\/.*"
@@ -1852,6 +2045,7 @@
1852
2045
  "Content-Type": "application/hal+json;charset=utf-8"
1853
2046
  },
1854
2047
  "body": {
2048
+ "description": "a webhook",
1855
2049
  "_links": {
1856
2050
  "self": {
1857
2051
  "href": "http://localhost:1234/some-url",
@@ -1860,6 +2054,75 @@
1860
2054
  }
1861
2055
  },
1862
2056
  "matchingRules": {
2057
+ "$.body.description": {
2058
+ "match": "type"
2059
+ },
2060
+ "$.body._links.self.href": {
2061
+ "match": "regex",
2062
+ "regex": "http:\\/\\/.*"
2063
+ },
2064
+ "$.body._links.self.title": {
2065
+ "match": "type"
2066
+ }
2067
+ }
2068
+ }
2069
+ },
2070
+ {
2071
+ "description": "a request to update a webhook",
2072
+ "providerState": "a webhook with the uuid 696c5f93-1b7f-44bc-8d03-59440fcaa9a0 exists",
2073
+ "request": {
2074
+ "method": "put",
2075
+ "path": "/webhooks/696c5f93-1b7f-44bc-8d03-59440fcaa9a0",
2076
+ "headers": {
2077
+ "Content-Type": "application/json",
2078
+ "Accept": "application/hal+json"
2079
+ },
2080
+ "body": {
2081
+ "description": "a webhook",
2082
+ "events": [
2083
+ {
2084
+ "name": "contract_content_changed"
2085
+ }
2086
+ ],
2087
+ "request": {
2088
+ "url": "https://webhook",
2089
+ "method": "POST",
2090
+ "headers": {
2091
+ "Foo": "bar",
2092
+ "Bar": "foo"
2093
+ },
2094
+ "body": {
2095
+ "some": "body"
2096
+ },
2097
+ "username": "username",
2098
+ "password": "password"
2099
+ },
2100
+ "provider": {
2101
+ "name": "Pricing Service"
2102
+ },
2103
+ "consumer": {
2104
+ "name": "Condor"
2105
+ }
2106
+ }
2107
+ },
2108
+ "response": {
2109
+ "status": 200,
2110
+ "headers": {
2111
+ "Content-Type": "application/hal+json;charset=utf-8"
2112
+ },
2113
+ "body": {
2114
+ "description": "a webhook",
2115
+ "_links": {
2116
+ "self": {
2117
+ "href": "http://localhost:1234/some-url",
2118
+ "title": "A title"
2119
+ }
2120
+ }
2121
+ },
2122
+ "matchingRules": {
2123
+ "$.body.description": {
2124
+ "match": "type"
2125
+ },
1863
2126
  "$.body._links.self.href": {
1864
2127
  "match": "regex",
1865
2128
  "regex": "http:\\/\\/.*"