pact_broker 2.19.2 → 2.20.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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/example/README.md +7 -1
  4. data/example/config.ru +2 -3
  5. data/lib/pact_broker/api/contracts/webhook_contract.rb +73 -6
  6. data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +9 -13
  7. data/lib/pact_broker/api/resources/base_resource.rb +3 -3
  8. data/lib/pact_broker/api/resources/pact_webhooks.rb +1 -1
  9. data/lib/pact_broker/api/resources/webhook_execution.rb +5 -2
  10. data/lib/pact_broker/configuration.rb +9 -1
  11. data/lib/pact_broker/doc/views/webhooks.markdown +23 -0
  12. data/lib/pact_broker/domain/webhook_request.rb +49 -37
  13. data/lib/pact_broker/locale/en.yml +2 -0
  14. data/lib/pact_broker/version.rb +1 -1
  15. data/lib/pact_broker/webhooks/check_host_whitelist.rb +22 -0
  16. data/lib/pact_broker/webhooks/render.rb +23 -0
  17. data/lib/pact_broker/webhooks/service.rb +2 -1
  18. data/lib/pact_broker/webhooks/webhook.rb +0 -5
  19. data/spec/features/create_webhook_spec.rb +2 -3
  20. data/spec/features/edit_webhook_spec.rb +2 -2
  21. data/spec/features/execute_webhook_spec.rb +32 -1
  22. data/spec/fixtures/webhook_valid.json +1 -1
  23. data/spec/lib/pact_broker/api/contracts/webhook_contract_spec.rb +64 -1
  24. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +17 -9
  25. data/spec/lib/pact_broker/api/resources/pact_spec.rb +1 -1
  26. data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +3 -3
  27. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +3 -1
  28. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +73 -68
  29. data/spec/lib/pact_broker/webhooks/check_host_whitelist_spec.rb +47 -0
  30. data/spec/lib/pact_broker/webhooks/render_spec.rb +36 -0
  31. data/spec/lib/pact_broker/webhooks/service_spec.rb +7 -0
  32. data/spec/support/shared_examples_for_responses.rb +2 -2
  33. metadata +8 -2
@@ -0,0 +1,47 @@
1
+ require 'pact_broker/webhooks/check_host_whitelist'
2
+
3
+ module PactBroker
4
+ module Webhooks
5
+ describe CheckHostWhitelist do
6
+ context "when the host is 10.0.0.7" do
7
+ let(:host) { "10.0.1.0" }
8
+
9
+ it "matches 10.0.0.0/8" do
10
+ expect(CheckHostWhitelist.call(host, ["10.0.0.0/8"])).to eq ["10.0.0.0/8"]
11
+ end
12
+
13
+ it "matches 10.0.1.0" do
14
+ expect(CheckHostWhitelist.call(host, [host])).to eq [host]
15
+ end
16
+
17
+ it "does not match 10.0.0.2" do
18
+ expect(CheckHostWhitelist.call(host, ["10.0.0.2"])).to eq []
19
+ end
20
+
21
+ it "does not match 10.0.0.0/28" do
22
+ expect(CheckHostWhitelist.call(host, ["10.0.0.0/28"])).to eq []
23
+ end
24
+ end
25
+
26
+ context "when the host is localhost" do
27
+ let(:host) { "localhost" }
28
+
29
+ it "matches localhost" do
30
+ expect(CheckHostWhitelist.call(host, [host])).to eq [host]
31
+ end
32
+
33
+ it "matches /local.*/" do
34
+ expect(CheckHostWhitelist.call(host, [/local*/])).to eq [/local*/]
35
+ end
36
+
37
+ it "does not match foo" do
38
+ expect(CheckHostWhitelist.call(host, ["foo"])).to eq []
39
+ end
40
+
41
+ it "does not match /foo.*/" do
42
+ expect(CheckHostWhitelist.call(host, [/foo*/])).to eq []
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,36 @@
1
+ require 'pact_broker/webhooks/render'
2
+ require 'cgi'
3
+
4
+ module PactBroker
5
+ module Webhooks
6
+ describe Render do
7
+ describe "#call" do
8
+ before do
9
+ allow(PactBroker::Api::PactBrokerUrls).to receive(:pact_url).and_return("http://foo")
10
+ end
11
+
12
+ let(:body) do
13
+ "Foo ${pactbroker.pactUrl} ${pactbroker.consumerVersionNumber}"
14
+ end
15
+
16
+ let(:pact) do
17
+ instance_double("pact", consumer_version_number: "1.2.3+foo")
18
+ end
19
+
20
+ subject { Render.call(body, pact, nil) }
21
+
22
+ it { is_expected.to eq "Foo http://foo 1.2.3+foo" }
23
+
24
+ context "with an escaper" do
25
+ subject do
26
+ Render.call(body, pact, nil) do | value |
27
+ CGI.escape(value)
28
+ end
29
+ end
30
+
31
+ it { is_expected.to eq "Foo http%3A%2F%2Ffoo 1.2.3%2Bfoo" }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -102,6 +102,13 @@ module PactBroker
102
102
 
103
103
  subject { PactBroker::Webhooks::Service.execute_webhook_now td.webhook, pact }
104
104
 
105
+ it "executes the triggered webhook with the correct options" do
106
+ allow(PactBroker.configuration).to receive(:show_webhook_response?).and_return('foo')
107
+ expected_options = { :failure_log_message => "Webhook execution failed", :show_response => 'foo' }
108
+ expect_any_instance_of(PactBroker::Webhooks::TriggeredWebhook).to receive(:execute).with(expected_options).and_call_original
109
+ subject
110
+ end
111
+
105
112
  it "executes the HTTP request of the webhook" do
106
113
  subject
107
114
  expect(http_request).to have_been_made
@@ -24,14 +24,14 @@ end
24
24
 
25
25
  RSpec::Matchers.define :be_a_json_response do
26
26
  match do | actual |
27
- expect(actual.headers['Content-Type']).to eq 'application/json;charset=utf-8'
27
+ expect(actual.headers['Content-Type']).to eq 'application/hal+json;charset=utf-8'
28
28
  end
29
29
  end
30
30
 
31
31
  RSpec::Matchers.define :be_a_json_error_response do | message |
32
32
  match do | actual |
33
33
  expect(actual.status).to be 400
34
- expect(actual.headers['Content-Type']).to eq 'application/json;charset=utf-8'
34
+ expect(actual.headers['Content-Type']).to eq 'application/hal+json;charset=utf-8'
35
35
  expect(actual.body).to include message
36
36
  end
37
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact_broker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.2
4
+ version: 2.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bethany Skurrie
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-05-29 00:00:00.000000000 Z
13
+ date: 2018-06-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
@@ -887,10 +887,12 @@ files:
887
887
  - lib/pact_broker/versions/parse_semantic_version.rb
888
888
  - lib/pact_broker/versions/repository.rb
889
889
  - lib/pact_broker/versions/service.rb
890
+ - lib/pact_broker/webhooks/check_host_whitelist.rb
890
891
  - lib/pact_broker/webhooks/execution.rb
891
892
  - lib/pact_broker/webhooks/job.rb
892
893
  - lib/pact_broker/webhooks/latest_triggered_webhook.rb
893
894
  - lib/pact_broker/webhooks/redact_logs.rb
895
+ - lib/pact_broker/webhooks/render.rb
894
896
  - lib/pact_broker/webhooks/repository.rb
895
897
  - lib/pact_broker/webhooks/service.rb
896
898
  - lib/pact_broker/webhooks/status.rb
@@ -1144,8 +1146,10 @@ files:
1144
1146
  - spec/lib/pact_broker/versions/parse_semantic_version_spec.rb
1145
1147
  - spec/lib/pact_broker/versions/repository_spec.rb
1146
1148
  - spec/lib/pact_broker/versions/service_spec.rb
1149
+ - spec/lib/pact_broker/webhooks/check_host_whitelist_spec.rb
1147
1150
  - spec/lib/pact_broker/webhooks/job_spec.rb
1148
1151
  - spec/lib/pact_broker/webhooks/redact_logs_spec.rb
1152
+ - spec/lib/pact_broker/webhooks/render_spec.rb
1149
1153
  - spec/lib/pact_broker/webhooks/repository_spec.rb
1150
1154
  - spec/lib/pact_broker/webhooks/service_spec.rb
1151
1155
  - spec/lib/pact_broker/webhooks/status_spec.rb
@@ -1433,8 +1437,10 @@ test_files:
1433
1437
  - spec/lib/pact_broker/versions/parse_semantic_version_spec.rb
1434
1438
  - spec/lib/pact_broker/versions/repository_spec.rb
1435
1439
  - spec/lib/pact_broker/versions/service_spec.rb
1440
+ - spec/lib/pact_broker/webhooks/check_host_whitelist_spec.rb
1436
1441
  - spec/lib/pact_broker/webhooks/job_spec.rb
1437
1442
  - spec/lib/pact_broker/webhooks/redact_logs_spec.rb
1443
+ - spec/lib/pact_broker/webhooks/render_spec.rb
1438
1444
  - spec/lib/pact_broker/webhooks/repository_spec.rb
1439
1445
  - spec/lib/pact_broker/webhooks/service_spec.rb
1440
1446
  - spec/lib/pact_broker/webhooks/status_spec.rb