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