pact_broker-client 1.40.0 → 1.45.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +21 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +57 -0
  5. data/Gemfile +4 -0
  6. data/README.md +39 -22
  7. data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +79 -280
  8. data/lib/pact_broker/client/backports.rb +9 -0
  9. data/lib/pact_broker/client/base_command.rb +98 -0
  10. data/lib/pact_broker/client/can_i_deploy.rb +57 -5
  11. data/lib/pact_broker/client/cli/broker.rb +23 -76
  12. data/lib/pact_broker/client/cli/custom_thor.rb +12 -0
  13. data/lib/pact_broker/client/cli/deployment_commands.rb +94 -0
  14. data/lib/pact_broker/client/cli/environment_commands.rb +70 -0
  15. data/lib/pact_broker/client/cli/pacticipant_commands.rb +53 -0
  16. data/lib/pact_broker/client/cli/record_deployment_long_desc.txt +0 -55
  17. data/lib/pact_broker/client/cli/version_selector_options_parser.rb +4 -0
  18. data/lib/pact_broker/client/colorize_notices.rb +31 -0
  19. data/lib/pact_broker/client/deployments.rb +4 -0
  20. data/lib/pact_broker/client/deployments/record_deployment.rb +38 -0
  21. data/lib/pact_broker/client/deployments/record_release.rb +99 -0
  22. data/lib/pact_broker/client/deployments/record_support_ended.rb +103 -0
  23. data/lib/pact_broker/client/deployments/record_undeployment.rb +127 -0
  24. data/lib/pact_broker/client/describe_text_formatter.rb +23 -0
  25. data/lib/pact_broker/client/environments.rb +6 -0
  26. data/lib/pact_broker/client/environments/create_environment.rb +31 -0
  27. data/lib/pact_broker/client/environments/delete_environment.rb +27 -0
  28. data/lib/pact_broker/client/environments/describe_environment.rb +26 -0
  29. data/lib/pact_broker/client/environments/environment_command.rb +66 -0
  30. data/lib/pact_broker/client/environments/list_environments.rb +30 -0
  31. data/lib/pact_broker/client/environments/text_formatter.rb +30 -0
  32. data/lib/pact_broker/client/environments/update_environment.rb +31 -0
  33. data/lib/pact_broker/client/generate_display_name.rb +27 -0
  34. data/lib/pact_broker/client/hal/entity.rb +31 -6
  35. data/lib/pact_broker/client/hal/http_client.rb +8 -2
  36. data/lib/pact_broker/client/hal/link.rb +8 -0
  37. data/lib/pact_broker/client/hal_client_methods.rb +1 -3
  38. data/lib/pact_broker/client/matrix.rb +4 -0
  39. data/lib/pact_broker/client/matrix/abbreviate_version_number.rb +15 -0
  40. data/lib/pact_broker/client/matrix/resource.rb +26 -1
  41. data/lib/pact_broker/client/matrix/text_formatter.rb +28 -17
  42. data/lib/pact_broker/client/pacticipants.rb +6 -0
  43. data/lib/pact_broker/client/pacticipants/create.rb +24 -34
  44. data/lib/pact_broker/client/pacticipants/describe.rb +33 -0
  45. data/lib/pact_broker/client/pacticipants/list.rb +34 -0
  46. data/lib/pact_broker/client/pacticipants/text_formatter.rb +41 -0
  47. data/lib/pact_broker/client/publish_pacts.rb +6 -2
  48. data/lib/pact_broker/client/string_refinements.rb +56 -0
  49. data/lib/pact_broker/client/version.rb +1 -1
  50. data/lib/pact_broker/client/versions.rb +4 -1
  51. data/lib/pact_broker/client/versions/describe.rb +3 -1
  52. data/lib/pact_broker/client/versions/formatter.rb +3 -1
  53. data/lib/pact_broker/client/versions/json_formatter.rb +5 -3
  54. data/lib/pact_broker/client/versions/text_formatter.rb +3 -1
  55. data/pact-broker-client.gemspec +2 -0
  56. data/script/approve-all.sh +6 -0
  57. data/script/publish-pact.sh +12 -9
  58. data/script/record-deployments-and-releases.sh +18 -0
  59. data/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt +7 -0
  60. data/spec/fixtures/approvals/can_i_deploy_ignore.approved.txt +13 -0
  61. data/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt +7 -0
  62. data/spec/fixtures/approvals/describe_environment.approved.txt +7 -0
  63. data/spec/fixtures/approvals/describe_pacticipant.approved.txt +2 -0
  64. data/spec/fixtures/approvals/list_environments.approved.txt +3 -0
  65. data/spec/integration/describe_environment_spec.rb +31 -0
  66. data/spec/lib/pact_broker/client/can_i_deploy_spec.rb +109 -7
  67. data/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb +19 -6
  68. data/spec/lib/pact_broker/client/cli/broker_publish_spec.rb +1 -1
  69. data/spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb +3 -3
  70. data/spec/lib/pact_broker/client/cli/version_selector_options_parser_spec.rb +21 -0
  71. data/spec/lib/pact_broker/client/deployments/record_deployment_spec.rb +204 -0
  72. data/spec/lib/pact_broker/client/deployments/record_support_ended_spec.rb +208 -0
  73. data/spec/lib/pact_broker/client/deployments/record_undeployment_spec.rb +219 -0
  74. data/spec/lib/pact_broker/client/environments/delete_environment_spec.rb +120 -0
  75. data/spec/lib/pact_broker/client/environments/describe_environment_spec.rb +89 -0
  76. data/spec/lib/pact_broker/client/environments/update_environment_spec.rb +167 -0
  77. data/spec/lib/pact_broker/client/generate_display_name_spec.rb +39 -0
  78. data/spec/lib/pact_broker/client/hal/entity_spec.rb +2 -2
  79. data/spec/lib/pact_broker/client/pacticipants/create_spec.rb +2 -2
  80. data/spec/pacts/pact_broker_client-pact_broker.json +88 -287
  81. data/spec/service_providers/create_environment_spec.rb +78 -0
  82. data/spec/service_providers/list_environments_spec.rb +77 -0
  83. data/spec/service_providers/pact_broker_client_matrix_ignore_spec.rb +98 -0
  84. data/spec/service_providers/pact_broker_client_register_repository_spec.rb +2 -2
  85. data/spec/service_providers/pacticipants_create_spec.rb +5 -4
  86. data/spec/service_providers/publish_pacts_spec.rb +5 -2
  87. data/spec/service_providers/record_deployment_spec.rb +17 -36
  88. data/spec/service_providers/record_release_spec.rb +132 -0
  89. data/spec/service_providers/record_undeployment_spec.rb +166 -0
  90. data/spec/spec_helper.rb +15 -2
  91. data/spec/support/approvals.rb +26 -0
  92. data/spec/support/shared_context.rb +8 -3
  93. data/tasks/pact.rake +21 -1
  94. metadata +104 -7
  95. data/lib/pact_broker/client/versions/record_deployment.rb +0 -109
  96. data/lib/pact_broker/client/versions/record_undeployment.rb +0 -102
  97. data/spec/lib/pact_broker/client/versions/record_deployment_spec.rb +0 -82
@@ -0,0 +1,39 @@
1
+ require 'pact_broker/client/generate_display_name'
2
+
3
+ module PactBroker
4
+ module Client
5
+ describe GenerateDisplayName do
6
+ describe ".call" do
7
+ TEST_CASES = {
8
+ "foo" => "Foo",
9
+ "MyService" => "My Service",
10
+ "my-service" => "My Service",
11
+ "my_service" => "My Service",
12
+ "my service" => "My Service",
13
+ "ABCService" => "ABC Service",
14
+ "A4Service" => "A4 Service",
15
+ "SNSPactEventConsumer" => "SNS Pact Event Consumer",
16
+ "AWSSummiteerWeb" => "AWS Summiteer Web",
17
+ "Beer-Consumer" => "Beer Consumer",
18
+ "foo.pretend-consumer" => "Foo Pretend Consumer",
19
+ "Client-XX" => "Client XX",
20
+ "providerJSWorkshop" => "Provider JS Workshop",
21
+ "e2e Provider Example" => "E2e Provider Example",
22
+ "MP - Our Provider" => "MP - Our Provider",
23
+ "PoC - Pact-broker-consumer" => "PoC - Pact Broker Consumer",
24
+ "QB-DATABASE Service" => "QB DATABASE Service",
25
+ "Support Species App (Provider)" => "Support Species App (Provider)",
26
+ 9 => "9",
27
+ "" => "",
28
+ nil => nil
29
+ }
30
+
31
+ TEST_CASES.each do | name, expected_display_name |
32
+ it "converts #{name.inspect} to #{expected_display_name.inspect}" do
33
+ expect(GenerateDisplayName.call(name)).to eq expected_display_name
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -73,7 +73,7 @@ module PactBroker::Client
73
73
  subject(:entity) { ErrorEntity.new("http://pact", pact_hash, http_client) }
74
74
 
75
75
  it "raises an error" do
76
- expect { entity.assert_success! }.to raise_error ErrorResponseReturned, "Error retrieving http://pact status="
76
+ expect { entity.assert_success! }.to raise_error ErrorResponseReturned, "Error making request to http://pact status="
77
77
  end
78
78
  end
79
79
 
@@ -83,7 +83,7 @@ module PactBroker::Client
83
83
  subject(:entity) { ErrorEntity.new("http://pact", pact_hash, http_client, response) }
84
84
 
85
85
  it "raises an error" do
86
- expect { entity.assert_success! }.to raise_error ErrorResponseReturned, "Error retrieving http://pact status=200 body"
86
+ expect { entity.assert_success! }.to raise_error ErrorResponseReturned, "Error making request to http://pact status=200 body"
87
87
  end
88
88
  end
89
89
  end
@@ -8,11 +8,11 @@ module PactBroker
8
8
  before do
9
9
  allow_any_instance_of(PactBroker::Client::Hal::HttpClient).to receive(:sleep)
10
10
  end
11
- let(:pact_broker_client_options) { {} }
11
+ let(:pact_broker_client_options) { { pact_broker_base_url: broker_base_url} }
12
12
  let(:broker_base_url) { "http://url" }
13
13
  let(:params) { { name: 'Foo' } }
14
14
 
15
- subject { Create.call(params, broker_base_url, pact_broker_client_options)}
15
+ subject { Create.call(params, {}, pact_broker_client_options)}
16
16
 
17
17
  context "when there is an http error" do
18
18
  let!(:index_request) do
@@ -292,6 +292,94 @@
292
292
  }
293
293
  }
294
294
  },
295
+ {
296
+ "description": "a request to determine if Bar can be deployed with all Foo tagged prod, ignoring the verification for Foo version 3.4.5",
297
+ "providerState": "provider Bar version 4.5.6 has a successful verification for Foo version 1.2.3 tagged prod and a failed verification for version 3.4.5 tagged prod",
298
+ "request": {
299
+ "method": "get",
300
+ "path": "/matrix",
301
+ "query": "q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Btag%5D=prod&latestby=cvpv&ignore%5B%5D%5Bpacticipant%5D=Foo&ignore%5B%5D%5Bversion%5D=3.4.5"
302
+ },
303
+ "response": {
304
+ "status": 200,
305
+ "headers": {
306
+ "Content-Type": "application/hal+json;charset=utf-8"
307
+ },
308
+ "body": {
309
+ "summary": {
310
+ "deployable": true,
311
+ "ignored": 1
312
+ },
313
+ "notices": [
314
+ {
315
+ "text": "some notice",
316
+ "type": "info"
317
+ }
318
+ ],
319
+ "matrix": [
320
+ {
321
+ "consumer": {
322
+ "name": "Foo",
323
+ "version": {
324
+ "number": "1.2.3"
325
+ }
326
+ },
327
+ "provider": {
328
+ "name": "Bar",
329
+ "version": {
330
+ "number": "4.5.6"
331
+ }
332
+ },
333
+ "verificationResult": {
334
+ "success": true,
335
+ "_links": {
336
+ "self": {
337
+ "href": "http://result"
338
+ }
339
+ }
340
+ }
341
+ },
342
+ {
343
+ "consumer": {
344
+ "name": "Foo",
345
+ "version": {
346
+ "number": "3.4.5"
347
+ }
348
+ },
349
+ "provider": {
350
+ "name": "Bar",
351
+ "version": {
352
+ "number": "4.5.6"
353
+ }
354
+ },
355
+ "verificationResult": {
356
+ "success": false,
357
+ "_links": {
358
+ "self": {
359
+ "href": "http://result"
360
+ }
361
+ }
362
+ },
363
+ "ignored": true
364
+ }
365
+ ]
366
+ },
367
+ "matchingRules": {
368
+ "$.body.notices": {
369
+ "min": 1
370
+ },
371
+ "$.body.notices[*].*": {
372
+ "match": "type"
373
+ },
374
+ "$.body.matrix[0].verificationResult._links.self.href": {
375
+ "match": "type"
376
+ },
377
+ "$.body.matrix[1].verificationResult._links.self.href": {
378
+ "match": "type"
379
+ }
380
+ }
381
+ }
382
+ },
295
383
  {
296
384
  "description": "a request for the compatibility matrix for Foo version 1.2.3 and Bar version 4.5.6",
297
385
  "providerState": "the pact for Foo version 1.2.3 has been verified by Bar version 4.5.6",
@@ -1550,293 +1638,6 @@
1550
1638
  }
1551
1639
  }
1552
1640
  },
1553
- {
1554
- "description": "a request for the index resource",
1555
- "providerState": "the pb:publish-contracts relations exists in the index resource",
1556
- "request": {
1557
- "method": "GET",
1558
- "path": "/",
1559
- "headers": {
1560
- "Accept": "application/hal+json"
1561
- }
1562
- },
1563
- "response": {
1564
- "status": 200,
1565
- "headers": {
1566
- "Content-Type": "application/hal+json;charset=utf-8"
1567
- },
1568
- "body": {
1569
- "_links": {
1570
- "pb:publish-contracts": {
1571
- "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PUBLISH-CONTRACTS"
1572
- }
1573
- }
1574
- },
1575
- "matchingRules": {
1576
- "$.body._links.pb:publish-contracts.href": {
1577
- "match": "regex",
1578
- "regex": "http:\\/\\/.*"
1579
- }
1580
- }
1581
- }
1582
- },
1583
- {
1584
- "description": "a request to publish contracts",
1585
- "request": {
1586
- "method": "POST",
1587
- "path": "/HAL-REL-PLACEHOLDER-PB-PUBLISH-CONTRACTS",
1588
- "headers": {
1589
- "Content-Type": "application/json",
1590
- "Accept": "application/hal+json"
1591
- },
1592
- "body": {
1593
- "pacticipantName": "Foo",
1594
- "pacticipantVersionNumber": "5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
1595
- "branch": "main",
1596
- "tags": [
1597
- "dev"
1598
- ],
1599
- "buildUrl": "http://build",
1600
- "contracts": [
1601
- {
1602
- "consumerName": "Foo",
1603
- "providerName": "Bar",
1604
- "specification": "pact",
1605
- "contentType": "application/json",
1606
- "content": "eyJjb25zdW1lciI6eyJuYW1lIjoiRm9vIn0sInByb3ZpZGVyIjp7Im5hbWUiOiJCYXIifSwiaW50ZXJhY3Rpb25zIjpbeyJkZXNjcmlwdGlvbiI6ImFuIGV4YW1wbGUgcmVxdWVzdCIsInByb3ZpZGVyU3RhdGUiOiJhIHByb3ZpZGVyIHN0YXRlIiwicmVxdWVzdCI6eyJtZXRob2QiOiJHRVQiLCJwYXRoIjoiLyIsImhlYWRlcnMiOnt9fSwicmVzcG9uc2UiOnsic3RhdHVzIjoyMDAsImhlYWRlcnMiOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vaGFsK2pzb24ifX19XSwibWV0YWRhdGEiOnsicGFjdFNwZWNpZmljYXRpb24iOnsidmVyc2lvbiI6IjIuMC4wIn19fQ==",
1607
- "writeMode": "overwrite"
1608
- }
1609
- ]
1610
- }
1611
- },
1612
- "response": {
1613
- "status": 200,
1614
- "headers": {
1615
- "Content-Type": "application/hal+json;charset=utf-8"
1616
- },
1617
- "body": {
1618
- "_embedded": {
1619
- "pacticipant": {
1620
- "name": "Foo"
1621
- },
1622
- "version": {
1623
- "number": "5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
1624
- "buildUrl": "http://build"
1625
- }
1626
- },
1627
- "logs": [
1628
- {
1629
- "level": "info",
1630
- "message": "some message"
1631
- }
1632
- ],
1633
- "_links": {
1634
- "pb:pacticipant-version-tags": [
1635
- {
1636
- "name": "dev"
1637
- }
1638
- ],
1639
- "pb:contracts": [
1640
- {
1641
- "href": "http://some-pact"
1642
- }
1643
- ]
1644
- }
1645
- },
1646
- "matchingRules": {
1647
- "$.body.logs": {
1648
- "min": 1
1649
- },
1650
- "$.body.logs[*].*": {
1651
- "match": "type"
1652
- },
1653
- "$.body._links.pb:contracts[0].href": {
1654
- "match": "type"
1655
- }
1656
- }
1657
- }
1658
- },
1659
- {
1660
- "description": "a request for the index resource",
1661
- "providerState": "the pb:pacticipant-version and pb:environments relations exist in the index resource",
1662
- "request": {
1663
- "method": "GET",
1664
- "path": "/",
1665
- "headers": {
1666
- "Accept": "application/hal+json"
1667
- }
1668
- },
1669
- "response": {
1670
- "status": 200,
1671
- "headers": {
1672
- "Content-Type": "application/hal+json;charset=utf-8"
1673
- },
1674
- "body": {
1675
- "_links": {
1676
- "pb:pacticipant-version": {
1677
- "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-{pacticipant}-{version}"
1678
- },
1679
- "pb:environments": {
1680
- "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-ENVIRONMENTS"
1681
- }
1682
- }
1683
- },
1684
- "matchingRules": {
1685
- "$.body._links.pb:pacticipant-version.href": {
1686
- "match": "regex",
1687
- "regex": "http:\\/\\/.*{pacticipant}.*{version}"
1688
- },
1689
- "$.body._links.pb:environments.href": {
1690
- "match": "regex",
1691
- "regex": "http:\\/\\/.*"
1692
- }
1693
- }
1694
- }
1695
- },
1696
- {
1697
- "description": "a request for a pacticipant version",
1698
- "providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo exists with a test environment available for deployment",
1699
- "request": {
1700
- "method": "GET",
1701
- "path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-Foo-5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
1702
- "headers": {
1703
- "Accept": "application/hal+json"
1704
- }
1705
- },
1706
- "response": {
1707
- "status": 200,
1708
- "headers": {
1709
- "Content-Type": "application/hal+json;charset=utf-8"
1710
- },
1711
- "body": {
1712
- "_links": {
1713
- "pb:record-deployment": [
1714
- {
1715
- "name": "test",
1716
- "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-RECORD-DEPLOYMENT-FOO-5556B8149BF8BAC76BC30F50A8A2DD4C22C85F30-TEST"
1717
- }
1718
- ]
1719
- }
1720
- },
1721
- "matchingRules": {
1722
- "$.body._links.pb:record-deployment[0].href": {
1723
- "match": "regex",
1724
- "regex": "http:\\/\\/.*"
1725
- }
1726
- }
1727
- }
1728
- },
1729
- {
1730
- "description": "a request to record a deployment",
1731
- "providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo exists with a test environment available for deployment",
1732
- "request": {
1733
- "method": "POST",
1734
- "path": "/HAL-REL-PLACEHOLDER-PB-RECORD-DEPLOYMENT-FOO-5556B8149BF8BAC76BC30F50A8A2DD4C22C85F30-TEST",
1735
- "headers": {
1736
- "Content-Type": "application/json",
1737
- "Accept": "application/hal+json"
1738
- },
1739
- "body": {
1740
- "replacedPreviousDeployedVersion": true
1741
- }
1742
- },
1743
- "response": {
1744
- "status": 201,
1745
- "headers": {
1746
- "Content-Type": "application/hal+json;charset=utf-8"
1747
- },
1748
- "body": {
1749
- "replacedPreviousDeployedVersion": true
1750
- }
1751
- }
1752
- },
1753
- {
1754
- "description": "a request for a pacticipant version",
1755
- "providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo does not exist",
1756
- "request": {
1757
- "method": "GET",
1758
- "path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-Foo-5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
1759
- "headers": {
1760
- "Accept": "application/hal+json"
1761
- }
1762
- },
1763
- "response": {
1764
- "status": 404,
1765
- "headers": {
1766
- }
1767
- }
1768
- },
1769
- {
1770
- "description": "a request for a pacticipant version",
1771
- "providerState": "version 5556b8149bf8bac76bc30f50a8a2dd4c22c85f30 of pacticipant Foo exists with 2 environments that aren't test available for deployment",
1772
- "request": {
1773
- "method": "GET",
1774
- "path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-VERSION-Foo-5556b8149bf8bac76bc30f50a8a2dd4c22c85f30",
1775
- "headers": {
1776
- "Accept": "application/hal+json"
1777
- }
1778
- },
1779
- "response": {
1780
- "status": 200,
1781
- "headers": {
1782
- "Content-Type": "application/hal+json;charset=utf-8"
1783
- },
1784
- "body": {
1785
- "_links": {
1786
- "pb:record-deployment": [
1787
- {
1788
- "name": "prod",
1789
- "href": "href"
1790
- },
1791
- {
1792
- "name": "dev",
1793
- "href": "href"
1794
- }
1795
- ]
1796
- }
1797
- },
1798
- "matchingRules": {
1799
- "$.body._links.pb:record-deployment[0]": {
1800
- "match": "type"
1801
- },
1802
- "$.body._links.pb:record-deployment[1]": {
1803
- "match": "type"
1804
- }
1805
- }
1806
- }
1807
- },
1808
- {
1809
- "description": "a request for the environments",
1810
- "providerState": "an environment with name test exists",
1811
- "request": {
1812
- "method": "GET",
1813
- "path": "/HAL-REL-PLACEHOLDER-PB-ENVIRONMENTS",
1814
- "headers": {
1815
- "Accept": "application/hal+json"
1816
- }
1817
- },
1818
- "response": {
1819
- "status": 200,
1820
- "headers": {
1821
- "Content-Type": "application/hal+json;charset=utf-8"
1822
- },
1823
- "body": {
1824
- "_links": {
1825
- "pb:environments": [
1826
- {
1827
- "name": "test",
1828
- "href": "href"
1829
- }
1830
- ]
1831
- }
1832
- },
1833
- "matchingRules": {
1834
- "$.body._links.pb:environments[0].href": {
1835
- "match": "type"
1836
- }
1837
- }
1838
- }
1839
- },
1840
1641
  {
1841
1642
  "description": "a request to create a webhook with a JSON body for a consumer and provider",
1842
1643
  "providerState": "the 'Pricing Service' and 'Condor' already exist in the pact-broker",