pact_broker 2.0.0.beta.6 → 2.0.0.beta.7
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +12 -12
- data/db/migrations/08_create_latest_pact_view.rb +4 -4
- data/db/migrations/14_add_timestamps_to_pact_views.rb +5 -4
- data/db/migrations/20_add_pact_version_content_sha_to_all_pacts_view.rb +12 -10
- data/db/migrations/28_create_all_pact_publications.rb +6 -5
- data/lib/pact_broker/api/decorators/verification_decorator.rb +0 -3
- data/lib/pact_broker/api/decorators/verification_summary_decorator.rb +36 -0
- data/lib/pact_broker/api/decorators/versions_decorator.rb +1 -1
- data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +5 -5
- data/lib/pact_broker/api/resources/versions.rb +1 -1
- data/lib/pact_broker/app.rb +2 -0
- data/lib/pact_broker/configuration.rb +6 -1
- data/lib/pact_broker/domain/order_versions.rb +15 -5
- data/lib/pact_broker/domain/verification.rb +1 -1
- data/lib/pact_broker/domain/webhook.rb +0 -1
- data/lib/pact_broker/domain/webhook_request.rb +6 -4
- data/lib/pact_broker/logging.rb +4 -0
- data/lib/pact_broker/pacticipants/repository.rb +3 -2
- data/lib/pact_broker/pacticipants/service.rb +12 -9
- data/lib/pact_broker/pacts/all_pact_publications.rb +2 -2
- data/lib/pact_broker/pacts/repository.rb +11 -2
- data/lib/pact_broker/pacts/service.rb +4 -0
- data/lib/pact_broker/tags/repository.rb +5 -5
- data/lib/pact_broker/verifications/repository.rb +4 -3
- data/lib/pact_broker/verifications/service.rb +8 -0
- data/lib/pact_broker/verifications/summary_for_consumer_version.rb +41 -0
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/parse_semantic_version.rb +14 -4
- data/lib/pact_broker/versions/repository.rb +1 -1
- data/lib/pact_broker/webhooks/job.rb +46 -0
- data/lib/pact_broker/webhooks/service.rb +9 -8
- data/lib/pact_broker/webhooks/webhook.rb +1 -1
- data/pact_broker.gemspec +4 -3
- data/pact_broker_client-pact_broker.json +4 -4
- data/script/foo-bar.json +22 -0
- data/script/publish-new.sh +7 -0
- data/script/publish.sh +2 -2
- data/script/recreate-pg-db.sh +10 -0
- data/spec/features/get_verifications_for_consumer_version_spec.rb +1 -1
- data/spec/fixtures/a_consumer-a_provider-2.json +1 -1
- data/spec/fixtures/a_consumer-a_provider-3.json +1 -1
- data/spec/fixtures/a_consumer-a_provider-conflict.json +1 -1
- data/spec/fixtures/a_consumer-a_provider-merged.json +2 -2
- data/spec/fixtures/a_consumer-a_provider.json +1 -1
- data/spec/fixtures/consumer-provider.json +1 -1
- data/spec/fixtures/renderer_pact.json +1 -1
- data/spec/lib/pact_broker/api/decorators/{verifications_decorator_spec.rb → verification_summary_decorator_spec.rb} +16 -13
- data/spec/lib/pact_broker/api/resources/latest_verifications_for_consumer_version_spec.rb +5 -5
- data/spec/lib/pact_broker/domain/order_versions_spec.rb +30 -10
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +3 -1
- data/spec/lib/pact_broker/pacticipants/repository_spec.rb +16 -0
- data/spec/lib/pact_broker/pacticipants/service_spec.rb +74 -24
- data/spec/lib/pact_broker/verifications/summary_for_consumer_version_spec.rb +72 -0
- data/spec/lib/pact_broker/versions/parse_semantic_version_spec.rb +5 -2
- data/spec/lib/pact_broker/webhooks/job_spec.rb +67 -0
- data/spec/lib/pact_broker/webhooks/service_spec.rb +40 -3
- data/spec/support/provider_state_builder.rb +3 -2
- data/tasks/db.rake +3 -2
- metadata +35 -14
- data/lib/pact_broker/api/decorators/verifications_decorator.rb +0 -30
- data/lib/pact_broker/pacts/all_pacts.rb +0 -12
- data/lib/pact_broker/pacts/latest_pacts.rb +0 -12
@@ -22,10 +22,13 @@ module PactBroker
|
|
22
22
|
expect(subject).to be < ParseSemanticVersion.call("1.3.1")
|
23
23
|
end
|
24
24
|
|
25
|
+
it "allows versions with one or two parts for backwards compatibility" do
|
26
|
+
expect(ParseSemanticVersion.call("1")).to eq ::SemVer.new(1,0,0)
|
27
|
+
expect(ParseSemanticVersion.call("1.2")).to eq ::SemVer.new(1,2,0)
|
28
|
+
end
|
29
|
+
|
25
30
|
it "returns nil when version is invalid" do
|
26
31
|
expect(ParseSemanticVersion.call("abc")).to be_nil
|
27
|
-
expect(ParseSemanticVersion.call("1")).to be_nil
|
28
|
-
expect(ParseSemanticVersion.call("1.2")).to be_nil
|
29
32
|
end
|
30
33
|
|
31
34
|
it "accepts semver metadata" do
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'pact_broker/webhooks/job'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Webhooks
|
5
|
+
describe Job do
|
6
|
+
|
7
|
+
before do
|
8
|
+
allow(PactBroker::Webhooks::Service).to receive(:execute_webhook_now)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:webhook) { double("webhook", uuid: '1234') }
|
12
|
+
|
13
|
+
context "when an error occurs for the first time" do
|
14
|
+
before do
|
15
|
+
allow(PactBroker::Webhooks::Service).to receive(:execute_webhook_now).and_raise("an error")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "reschedules the job in 10 seconds" do
|
19
|
+
expect(Job).to receive(:perform_in).with(10, {webhook: webhook, error_count: 1})
|
20
|
+
Job.new.perform(webhook: webhook)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when the webhook execution result is not successful for the first time" do
|
25
|
+
before do
|
26
|
+
allow(PactBroker::Webhooks::Service).to receive(:execute_webhook_now).and_return(instance_double("PactBroker::Domain::WebhookExecutionResult", success?: false))
|
27
|
+
end
|
28
|
+
|
29
|
+
it "reschedules the job in 10 seconds" do
|
30
|
+
expect(Job).to receive(:perform_in).with(10, {webhook: webhook, error_count: 1})
|
31
|
+
Job.new.perform(webhook: webhook)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when an error occurs for the second time" do
|
36
|
+
before do
|
37
|
+
allow(PactBroker::Webhooks::Service).to receive(:execute_webhook_now).and_raise("an error")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "reschedules the job in 60 seconds" do
|
41
|
+
expect(Job).to receive(:perform_in).with(60, {webhook: webhook, error_count: 2 })
|
42
|
+
Job.new.perform(webhook: webhook, error_count: 1)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when an error occurs for the last time" do
|
47
|
+
before do
|
48
|
+
allow(PactBroker::Webhooks::Service).to receive(:execute_webhook_now).and_raise("an error")
|
49
|
+
end
|
50
|
+
|
51
|
+
subject { Job.new.perform(webhook: webhook, error_count: 6) }
|
52
|
+
|
53
|
+
it "does not reschedule the job" do
|
54
|
+
expect(Job).to_not receive(:perform_in)
|
55
|
+
subject
|
56
|
+
end
|
57
|
+
|
58
|
+
it "logs that it has failed" do
|
59
|
+
allow(Job.logger).to receive(:error)
|
60
|
+
expect(Job.logger).to receive(:error).with(/Failed to execute/)
|
61
|
+
subject
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'pact_broker/webhooks/service'
|
3
|
+
require 'webmock/rspec'
|
4
|
+
require 'sucker_punch/testing/inline'
|
3
5
|
|
4
6
|
module PactBroker
|
5
7
|
|
@@ -12,11 +14,11 @@ module PactBroker
|
|
12
14
|
let(:consumer_version) { PactBroker::Domain::Version.new(number: '1.2.3') }
|
13
15
|
let(:consumer) { PactBroker::Domain::Pacticipant.new(name: 'Consumer') }
|
14
16
|
let(:provider) { PactBroker::Domain::Pacticipant.new(name: 'Provider') }
|
15
|
-
let(:webhooks) { [instance_double(PactBroker::Domain::Webhook)]}
|
17
|
+
let(:webhooks) { [instance_double(PactBroker::Domain::Webhook, description: 'description', uuid: '1244')]}
|
16
18
|
|
17
19
|
before do
|
18
20
|
allow_any_instance_of(PactBroker::Webhooks::Repository).to receive(:find_by_consumer_and_provider).and_return(webhooks)
|
19
|
-
allow(
|
21
|
+
allow(Job).to receive(:perform_async)
|
20
22
|
end
|
21
23
|
|
22
24
|
subject { Service.execute_webhooks pact }
|
@@ -45,7 +47,42 @@ module PactBroker
|
|
45
47
|
subject
|
46
48
|
end
|
47
49
|
end
|
50
|
+
|
51
|
+
context "when there is a scheduling error" do
|
52
|
+
before do
|
53
|
+
allow(Job).to receive(:perform_async).and_raise("an error")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "logs the error" do
|
57
|
+
allow(Service.logger).to receive(:error)
|
58
|
+
expect(Service.logger).to receive(:error).with(/an error/)
|
59
|
+
subject
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe ".execute_webhooks integration test" do
|
65
|
+
let!(:http_request) do
|
66
|
+
stub_request(:get, "http://example.org").
|
67
|
+
to_return(:status => 200)
|
68
|
+
end
|
69
|
+
|
70
|
+
let(:pact) do
|
71
|
+
ProviderStateBuilder.new
|
72
|
+
.create_consumer
|
73
|
+
.create_provider
|
74
|
+
.create_consumer_version
|
75
|
+
.create_pact
|
76
|
+
.create_webhook(method: 'GET', url: 'http://example.org')
|
77
|
+
.and_return(:pact)
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
it "executes the HTTP request of the webhook" do
|
82
|
+
PactBroker::Webhooks::Service.execute_webhooks pact
|
83
|
+
expect(http_request).to have_been_made
|
84
|
+
end
|
48
85
|
end
|
49
86
|
end
|
50
87
|
end
|
51
|
-
end
|
88
|
+
end
|
@@ -144,8 +144,9 @@ class ProviderStateBuilder
|
|
144
144
|
self
|
145
145
|
end
|
146
146
|
|
147
|
-
def create_webhook
|
148
|
-
|
147
|
+
def create_webhook params = {}
|
148
|
+
default_params = {method: 'POST', url: 'http://example.org', headers: {'Content-Type' => 'application/json'}}
|
149
|
+
request = PactBroker::Domain::WebhookRequest.new(default_params.merge(params))
|
149
150
|
@webhook = PactBroker::Webhooks::Repository.new.create PactBroker::Webhooks::Service.next_uuid, PactBroker::Domain::Webhook.new(request: request), @consumer, @provider
|
150
151
|
self
|
151
152
|
end
|
data/tasks/db.rake
CHANGED
@@ -26,8 +26,9 @@ namespace :db do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
desc 'Migrate the Database'
|
29
|
-
task :migrate => 'db:env' do
|
30
|
-
|
29
|
+
task :migrate, [:target] => 'db:env' do |t, args|
|
30
|
+
target = args[:target] ? args[:target].to_i : nil
|
31
|
+
PactBroker::Database.migrate(target)
|
31
32
|
end
|
32
33
|
|
33
34
|
desc 'Rollback database to specified version'
|
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.0.0.beta.
|
4
|
+
version: 2.0.0.beta.7
|
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: 2017-05-
|
13
|
+
date: 2017-05-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -66,14 +66,14 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.2
|
69
|
+
version: '2.2'
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 2.2
|
76
|
+
version: '2.2'
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
78
|
name: dry-validation
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,21 +221,35 @@ dependencies:
|
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '4.0'
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
224
|
+
name: sucker_punch
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
227
|
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
230
|
-
type: :
|
229
|
+
version: '2.0'
|
230
|
+
type: :runtime
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
234
|
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
236
|
+
version: '2.0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: sqlite3
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
237
251
|
- !ruby/object:Gem::Dependency
|
238
|
-
name: pry
|
252
|
+
name: pry-byebug
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
240
254
|
requirements:
|
241
255
|
- - ">="
|
@@ -457,7 +471,7 @@ files:
|
|
457
471
|
- lib/pact_broker/api/decorators/tag_decorator.rb
|
458
472
|
- lib/pact_broker/api/decorators/timestamps.rb
|
459
473
|
- lib/pact_broker/api/decorators/verification_decorator.rb
|
460
|
-
- lib/pact_broker/api/decorators/
|
474
|
+
- lib/pact_broker/api/decorators/verification_summary_decorator.rb
|
461
475
|
- lib/pact_broker/api/decorators/version_decorator.rb
|
462
476
|
- lib/pact_broker/api/decorators/versions_decorator.rb
|
463
477
|
- lib/pact_broker/api/decorators/webhook_decorator.rb
|
@@ -539,12 +553,10 @@ files:
|
|
539
553
|
- lib/pact_broker/pacticipants/repository.rb
|
540
554
|
- lib/pact_broker/pacticipants/service.rb
|
541
555
|
- lib/pact_broker/pacts/all_pact_publications.rb
|
542
|
-
- lib/pact_broker/pacts/all_pacts.rb
|
543
556
|
- lib/pact_broker/pacts/create_formatted_diff.rb
|
544
557
|
- lib/pact_broker/pacts/diff.rb
|
545
558
|
- lib/pact_broker/pacts/latest_pact_publications.rb
|
546
559
|
- lib/pact_broker/pacts/latest_pact_publications_by_consumer_version.rb
|
547
|
-
- lib/pact_broker/pacts/latest_pacts.rb
|
548
560
|
- lib/pact_broker/pacts/latest_tagged_pact_publications.rb
|
549
561
|
- lib/pact_broker/pacts/merger.rb
|
550
562
|
- lib/pact_broker/pacts/pact_params.rb
|
@@ -578,10 +590,12 @@ files:
|
|
578
590
|
- lib/pact_broker/verifications/latest_verifications_by_consumer_version.rb
|
579
591
|
- lib/pact_broker/verifications/repository.rb
|
580
592
|
- lib/pact_broker/verifications/service.rb
|
593
|
+
- lib/pact_broker/verifications/summary_for_consumer_version.rb
|
581
594
|
- lib/pact_broker/version.rb
|
582
595
|
- lib/pact_broker/versions/parse_semantic_version.rb
|
583
596
|
- lib/pact_broker/versions/repository.rb
|
584
597
|
- lib/pact_broker/versions/service.rb
|
598
|
+
- lib/pact_broker/webhooks/job.rb
|
585
599
|
- lib/pact_broker/webhooks/repository.rb
|
586
600
|
- lib/pact_broker/webhooks/service.rb
|
587
601
|
- lib/pact_broker/webhooks/webhook.rb
|
@@ -614,10 +628,13 @@ files:
|
|
614
628
|
- public/stylesheets/github.css
|
615
629
|
- public/stylesheets/pact.css
|
616
630
|
- public/stylesheets/relationships.css
|
631
|
+
- script/foo-bar.json
|
617
632
|
- script/publish-2.sh
|
633
|
+
- script/publish-new.sh
|
618
634
|
- script/publish-not-a-pact.sh
|
619
635
|
- script/publish.sh
|
620
636
|
- script/record_verification.sh
|
637
|
+
- script/recreate-pg-db.sh
|
621
638
|
- script/update-hal-browser
|
622
639
|
- spec/features/create_webhook_spec.rb
|
623
640
|
- spec/features/delete_pact_spec.rb
|
@@ -662,7 +679,7 @@ files:
|
|
662
679
|
- spec/lib/pact_broker/api/decorators/representable_pact_spec.rb
|
663
680
|
- spec/lib/pact_broker/api/decorators/tag_decorator_spec.rb
|
664
681
|
- spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb
|
665
|
-
- spec/lib/pact_broker/api/decorators/
|
682
|
+
- spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb
|
666
683
|
- spec/lib/pact_broker/api/decorators/version_decorator_spec.rb
|
667
684
|
- spec/lib/pact_broker/api/decorators/versions_decorator_spec.rb
|
668
685
|
- spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb
|
@@ -715,8 +732,10 @@ files:
|
|
715
732
|
- spec/lib/pact_broker/ui/view_models/relationships_spec.rb
|
716
733
|
- spec/lib/pact_broker/verifications/repository_spec.rb
|
717
734
|
- spec/lib/pact_broker/verifications/service_spec.rb
|
735
|
+
- spec/lib/pact_broker/verifications/summary_for_consumer_version_spec.rb
|
718
736
|
- spec/lib/pact_broker/versions/parse_semantic_version_spec.rb
|
719
737
|
- spec/lib/pact_broker/versions/repository_spec.rb
|
738
|
+
- spec/lib/pact_broker/webhooks/job_spec.rb
|
720
739
|
- spec/lib/pact_broker/webhooks/repository_spec.rb
|
721
740
|
- spec/lib/pact_broker/webhooks/service_spec.rb
|
722
741
|
- spec/lib/rack/hal_browser/redirect_spec.rb
|
@@ -842,7 +861,7 @@ test_files:
|
|
842
861
|
- spec/lib/pact_broker/api/decorators/representable_pact_spec.rb
|
843
862
|
- spec/lib/pact_broker/api/decorators/tag_decorator_spec.rb
|
844
863
|
- spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb
|
845
|
-
- spec/lib/pact_broker/api/decorators/
|
864
|
+
- spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb
|
846
865
|
- spec/lib/pact_broker/api/decorators/version_decorator_spec.rb
|
847
866
|
- spec/lib/pact_broker/api/decorators/versions_decorator_spec.rb
|
848
867
|
- spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb
|
@@ -895,8 +914,10 @@ test_files:
|
|
895
914
|
- spec/lib/pact_broker/ui/view_models/relationships_spec.rb
|
896
915
|
- spec/lib/pact_broker/verifications/repository_spec.rb
|
897
916
|
- spec/lib/pact_broker/verifications/service_spec.rb
|
917
|
+
- spec/lib/pact_broker/verifications/summary_for_consumer_version_spec.rb
|
898
918
|
- spec/lib/pact_broker/versions/parse_semantic_version_spec.rb
|
899
919
|
- spec/lib/pact_broker/versions/repository_spec.rb
|
920
|
+
- spec/lib/pact_broker/webhooks/job_spec.rb
|
900
921
|
- spec/lib/pact_broker/webhooks/repository_spec.rb
|
901
922
|
- spec/lib/pact_broker/webhooks/service_spec.rb
|
902
923
|
- spec/lib/rack/hal_browser/redirect_spec.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require_relative 'base_decorator'
|
2
|
-
require_relative 'version_decorator'
|
3
|
-
|
4
|
-
module PactBroker
|
5
|
-
module Api
|
6
|
-
module Decorators
|
7
|
-
|
8
|
-
class VerificationsDecorator < BaseDecorator
|
9
|
-
|
10
|
-
property :success, exec_context: :decorator, if: :any_verifications?
|
11
|
-
collection :entries, as: :'verification-results', embedded: true, :extend => PactBroker::Api::Decorators::VerificationDecorator
|
12
|
-
|
13
|
-
link :self do | context |
|
14
|
-
{
|
15
|
-
href: context.fetch(:resource_url),
|
16
|
-
title: "Latest verification results for consumer #{context.fetch(:consumer_name)} version #{context.fetch(:consumer_version_number)}"
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def success
|
21
|
-
represented.collect(&:success).all?
|
22
|
-
end
|
23
|
-
|
24
|
-
def any_verifications? context
|
25
|
-
represented.any?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|