pact_broker 2.19.2 → 2.20.0

Sign up to get free protection for your applications and to get access to all the features.
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