pact_broker 2.12.0 → 2.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -5
- data/README.md +13 -8
- data/bethtest.rb +21 -94
- data/db/migrations/20171112_add_test_results.rb +7 -0
- data/db/migrations/20171117_create_webhook_events.rb +14 -0
- data/db/migrations/20171118_create_webhook_events.rb +18 -0
- data/db/migrations/20180108_create_certificates_table.rb +14 -0
- data/db/migrations/20180109_migrate_trigger_type.rb +9 -0
- data/db/pact_broker_database.sqlite3 +0 -0
- data/db/test/backwards_compatibility/gemfiles/1.18.0.gemfile.lock +5 -5
- data/db/test/backwards_compatibility/gemfiles/2.0.0.gemfile.lock +5 -5
- data/db/test/backwards_compatibility/gemfiles/2.1.0.gemfile.lock +5 -5
- data/db/test/backwards_compatibility/gemfiles/2.2.0.gemfile.lock +12 -14
- data/db/test/backwards_compatibility/gemfiles/2.3.0.gemfile.lock +12 -14
- data/db/test/backwards_compatibility/gemfiles/2.4.2.gemfile.lock +12 -14
- data/db/test/backwards_compatibility/gemfiles/2.5.1.gemfile.lock +12 -14
- data/db/test/backwards_compatibility/gemfiles/2.6.0.gemfile.lock +12 -14
- data/db/test/backwards_compatibility/gemfiles/head.gemfile.lock +16 -15
- data/db/test/change_migration_strategy/before/Gemfile +1 -0
- data/example/README.md +65 -0
- data/example/config.ru +1 -0
- data/example/example_data.sql +17 -0
- data/lib/pact_broker/api.rb +1 -1
- data/lib/pact_broker/api/contracts/webhook_contract.rb +9 -1
- data/lib/pact_broker/api/decorators/verification_decorator.rb +1 -0
- data/lib/pact_broker/api/decorators/webhook_decorator.rb +35 -5
- data/lib/pact_broker/api/resources/matrix_badge.rb +21 -0
- data/lib/pact_broker/certificates/certificate.rb +8 -0
- data/lib/pact_broker/certificates/service.rb +41 -0
- data/lib/pact_broker/doc/controllers/app.rb +12 -2
- data/lib/pact_broker/doc/views/webhooks.markdown +37 -2
- data/lib/pact_broker/domain/verification.rb +2 -0
- data/lib/pact_broker/domain/webhook.rb +2 -1
- data/lib/pact_broker/domain/webhook_request.rb +22 -4
- data/lib/pact_broker/error.rb +5 -0
- data/lib/pact_broker/matrix/parse_query.rb +7 -10
- data/lib/pact_broker/matrix/repository.rb +5 -32
- data/lib/pact_broker/matrix/service.rb +21 -3
- data/lib/pact_broker/pacts/repository.rb +9 -2
- data/lib/pact_broker/pacts/service.rb +2 -2
- data/lib/pact_broker/services.rb +5 -0
- data/lib/pact_broker/ui/app.rb +15 -0
- data/lib/pact_broker/ui/controllers/matrix.rb +58 -3
- data/lib/pact_broker/ui/views/matrix/show.haml +65 -10
- data/lib/pact_broker/verifications/service.rb +6 -1
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/job.rb +1 -1
- data/lib/pact_broker/webhooks/repository.rb +17 -0
- data/lib/pact_broker/webhooks/service.rb +8 -7
- data/lib/pact_broker/webhooks/triggered_webhook.rb +1 -1
- data/lib/pact_broker/webhooks/webhook.rb +3 -0
- data/lib/pact_broker/webhooks/webhook_event.rb +24 -0
- data/pact_broker.gemspec +2 -1
- data/public/javascripts/matrix.js +60 -0
- data/public/stylesheets/matrix.css +12 -0
- data/script/db-spec.sh +1 -0
- data/script/foo-bar-verification.json +57 -0
- data/script/insert-self-signed-certificate-from-url.rb +32 -0
- data/script/publish-verification.sh +5 -0
- data/script/seed-matrix.rb +6 -5
- data/script/seed.rb +67 -59
- data/spec/features/create_webhook_spec.rb +4 -1
- data/spec/features/get_matrix_badge_spec.rb +40 -0
- data/spec/features/publish_verification_spec.rb +28 -4
- data/spec/fixtures/certificate-invalid.pem +29 -0
- data/spec/fixtures/certificate.pem +53 -0
- data/spec/fixtures/certificates/cacert.pem +21 -0
- data/spec/fixtures/certificates/cert.pem +20 -0
- data/spec/fixtures/certificates/key.pem +27 -0
- data/spec/fixtures/certificates/self-signed.badssl.com.pem +21 -0
- data/spec/fixtures/verification.json +4 -1
- data/spec/fixtures/webhook_valid.json +3 -0
- data/spec/integration/webhooks/certificate_spec.rb +80 -0
- data/spec/lib/pact_broker/api/contracts/webhook_contract_spec.rb +20 -0
- data/spec/lib/pact_broker/api/decorators/pact_webhooks_status_decorator_spec.rb +2 -2
- data/spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb +5 -0
- data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +1 -0
- data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +29 -19
- data/spec/lib/pact_broker/api/resources/badge_spec.rb +61 -0
- data/spec/lib/pact_broker/api/resources/matrix_badge_spec.rb +11 -0
- data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +8 -9
- data/spec/lib/pact_broker/certificates/service_spec.rb +60 -0
- data/spec/lib/pact_broker/domain/verification_spec.rb +13 -0
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +0 -4
- data/spec/lib/pact_broker/matrix/service_spec.rb +40 -8
- data/spec/lib/pact_broker/pacts/repository_spec.rb +18 -1
- data/spec/lib/pact_broker/webhooks/job_spec.rb +1 -1
- data/spec/lib/pact_broker/webhooks/repository_spec.rb +53 -13
- data/spec/lib/pact_broker/webhooks/service_spec.rb +9 -6
- data/spec/migrations/change_migration_strategy_spec.rb +13 -14
- data/spec/spec_helper.rb +4 -0
- data/spec/support/ssl_webhook_server.rb +37 -0
- data/spec/support/test_data_builder.rb +12 -4
- data/tasks/database.rb +9 -7
- data/tasks/database/table_dependency_calculator.rb +44 -0
- metadata +57 -6
- data/lib/pact_broker/doc/views/pact-webhooks.markdown +0 -50
- data/lib/pact_broker/doc/views/webhooks-create.markdown +0 -38
- data/lib/pact_broker/doc/views/webhooks-webhooks.markdown +0 -15
@@ -1,17 +1,18 @@
|
|
1
1
|
require 'pact_broker/repositories'
|
2
2
|
require 'pact_broker/logging'
|
3
|
-
require 'pact_broker/webhooks/job'
|
4
3
|
require 'base64'
|
5
4
|
require 'securerandom'
|
5
|
+
require 'pact_broker/webhooks/job'
|
6
6
|
require 'pact_broker/webhooks/triggered_webhook'
|
7
7
|
require 'pact_broker/webhooks/status'
|
8
|
+
require 'pact_broker/webhooks/webhook_event'
|
8
9
|
|
9
10
|
module PactBroker
|
10
11
|
|
11
12
|
module Webhooks
|
12
13
|
class Service
|
13
14
|
|
14
|
-
|
15
|
+
RESOURCE_CREATION = PactBroker::Webhooks::TriggeredWebhook::TRIGGER_TYPE_RESOURCE_CREATION
|
15
16
|
USER = PactBroker::Webhooks::TriggeredWebhook::TRIGGER_TYPE_USER
|
16
17
|
|
17
18
|
extend Repositories
|
@@ -83,21 +84,21 @@ module PactBroker
|
|
83
84
|
webhook_repository.find_by_consumer_and_provider consumer, provider
|
84
85
|
end
|
85
86
|
|
86
|
-
def self.execute_webhooks pact
|
87
|
-
webhooks = webhook_repository.
|
87
|
+
def self.execute_webhooks pact, event_name
|
88
|
+
webhooks = webhook_repository.find_by_consumer_and_provider_and_event_name pact.consumer, pact.provider, event_name
|
88
89
|
|
89
90
|
if webhooks.any?
|
90
|
-
run_later(webhooks, pact)
|
91
|
+
run_later(webhooks, pact, event_name)
|
91
92
|
else
|
92
93
|
logger.debug "No webhook found for consumer \"#{pact.consumer.name}\" and provider \"#{pact.provider.name}\""
|
93
94
|
end
|
94
95
|
end
|
95
96
|
|
96
|
-
def self.run_later webhooks, pact
|
97
|
+
def self.run_later webhooks, pact, event_name
|
97
98
|
trigger_uuid = next_uuid
|
98
99
|
webhooks.each do | webhook |
|
99
100
|
begin
|
100
|
-
triggered_webhook = webhook_repository.create_triggered_webhook(trigger_uuid, webhook, pact,
|
101
|
+
triggered_webhook = webhook_repository.create_triggered_webhook(trigger_uuid, webhook, pact, RESOURCE_CREATION)
|
101
102
|
logger.info "Scheduling job for #{webhook.description} with uuid #{webhook.uuid}"
|
102
103
|
Job.perform_async triggered_webhook: triggered_webhook
|
103
104
|
rescue StandardError => e
|
@@ -6,7 +6,7 @@ module PactBroker
|
|
6
6
|
module Webhooks
|
7
7
|
class TriggeredWebhook < Sequel::Model(:triggered_webhooks)
|
8
8
|
|
9
|
-
|
9
|
+
TRIGGER_TYPE_RESOURCE_CREATION = 'resource_creation'
|
10
10
|
TRIGGER_TYPE_USER = 'user'
|
11
11
|
|
12
12
|
STATUS_NOT_RUN = 'not_run'.freeze
|
@@ -9,6 +9,8 @@ module PactBroker
|
|
9
9
|
set_primary_key :id
|
10
10
|
associate(:many_to_one, :provider, :class => "PactBroker::Domain::Pacticipant", :key => :provider_id, :primary_key => :id)
|
11
11
|
associate(:many_to_one, :consumer, :class => "PactBroker::Domain::Pacticipant", :key => :consumer_id, :primary_key => :id)
|
12
|
+
|
13
|
+
one_to_many :events, :class => "PactBroker::Webhooks::WebhookEvent", :reciprocal => :webhook
|
12
14
|
one_to_many :headers, :class => "PactBroker::Webhooks::WebhookHeader", :reciprocal => :webhook
|
13
15
|
|
14
16
|
dataset_module do
|
@@ -41,6 +43,7 @@ module PactBroker
|
|
41
43
|
uuid: uuid,
|
42
44
|
consumer: consumer,
|
43
45
|
provider: provider,
|
46
|
+
events: events,
|
44
47
|
request: Domain::WebhookRequest.new(request_attributes),
|
45
48
|
created_at: created_at,
|
46
49
|
updated_at: updated_at)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
require 'pact_broker/repositories/helpers'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Webhooks
|
6
|
+
class WebhookEvent < Sequel::Model
|
7
|
+
|
8
|
+
CONTRACT_CONTENT_CHANGED = 'contract_content_changed'
|
9
|
+
VERIFICATION_PUBLISHED = 'provider_verification_published'
|
10
|
+
DEFAULT_EVENT_NAME = CONTRACT_CONTENT_CHANGED
|
11
|
+
#CONTRACT_VERIFIABLE_CONTENT_CHANGED = 'contract_verifiable_content_changed'
|
12
|
+
#VERIFICATION_STATUS_CHANGED = 'verification_status_changed'
|
13
|
+
|
14
|
+
EVENT_NAMES = [CONTRACT_CONTENT_CHANGED, VERIFICATION_PUBLISHED]
|
15
|
+
|
16
|
+
dataset_module do
|
17
|
+
include PactBroker::Repositories::Helpers
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
WebhookEvent.plugin :timestamps, update_on_create: true
|
23
|
+
end
|
24
|
+
end
|
data/pact_broker.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.email = ["bskurrie@dius.com.au", "serge.matheson@rea-group.com", "warner@warnergodfrey.com"]
|
11
11
|
gem.description = %q{A server that stores and returns pact files generated by the pact gem. It enables head/prod cross testing of the consumer and provider projects.}
|
12
12
|
gem.summary = %q{See description}
|
13
|
-
gem.homepage = "https://github.com/
|
13
|
+
gem.homepage = "https://github.com/pact-foundation/pact_broker"
|
14
14
|
|
15
15
|
gem.required_ruby_version = '>= 2.2.0'
|
16
16
|
|
@@ -38,6 +38,7 @@ Gem::Specification.new do |gem|
|
|
38
38
|
gem.add_runtime_dependency 'rack-protection', '~>2.0'
|
39
39
|
gem.add_runtime_dependency 'dry-types', '~> 0.10.3' # https://travis-ci.org/pact-foundation/pact_broker/jobs/249448621
|
40
40
|
gem.add_runtime_dependency 'table_print', '~> 1.5'
|
41
|
+
gem.add_runtime_dependency 'webrick', '~>1.3.0' # Webrick requires Ruby version >= 2.5.0dev. TODO remove dependency on Pact gem.
|
41
42
|
|
42
43
|
gem.add_development_dependency 'bundler-audit', '~>0.4'
|
43
44
|
gem.add_development_dependency 'sqlite3', '~>1.3'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
function handleRadioButtonClicked() {
|
2
|
+
selectApplicableTextBox($(this));
|
3
|
+
clearOtherTextBoxes($(this));
|
4
|
+
}
|
5
|
+
|
6
|
+
function selectApplicableTextBox(selectedRadioButton) {
|
7
|
+
selectedRadioButton.closest('.input-group').find('input[type="text"]').first().focus();
|
8
|
+
}
|
9
|
+
|
10
|
+
function handleTextBoxClicked() {
|
11
|
+
selectApplicableRadioButton($(this));
|
12
|
+
clearOtherTextBoxes($(this));
|
13
|
+
}
|
14
|
+
|
15
|
+
function selectApplicableRadioButton(selectedTextBox) {
|
16
|
+
selectedTextBox.closest('.input-group').find('.version-selectorizor').prop('checked', 'checked');
|
17
|
+
}
|
18
|
+
|
19
|
+
function clearOtherTextBoxes(clickedElement) {
|
20
|
+
clickedElement.closest('.selector').find('input[type="text"]').each(function(){
|
21
|
+
if(!$.contains(clickedElement.closest('.input-group')[0], $(this)[0])) {
|
22
|
+
$(this).prop('value', '');
|
23
|
+
}
|
24
|
+
});
|
25
|
+
}
|
26
|
+
|
27
|
+
function onSubmit() {
|
28
|
+
disableFieldsThatShouldNotBeSubmitted();
|
29
|
+
return true;
|
30
|
+
}
|
31
|
+
|
32
|
+
function disableFieldsThatShouldNotBeSubmitted() {
|
33
|
+
disableInputsForUncheckedRadioButtons();
|
34
|
+
disableRadioButtons();
|
35
|
+
}
|
36
|
+
|
37
|
+
function disableInputsForUncheckedRadioButtons() {
|
38
|
+
$('.version-selectorizor').each(function(){
|
39
|
+
if($(this).prop('checked') === false) {
|
40
|
+
$(this).closest('.input-group').find('input').prop('disabled', 'disabled');
|
41
|
+
}
|
42
|
+
});
|
43
|
+
}
|
44
|
+
|
45
|
+
function disableRadioButtons() {
|
46
|
+
$('.version-selectorizor').prop('disabled', 'disabled');
|
47
|
+
}
|
48
|
+
|
49
|
+
$(document).ready(function(){
|
50
|
+
$('.by-version').click(handleTextBoxClicked);
|
51
|
+
$('.by-latest-tag').click(handleTextBoxClicked);
|
52
|
+
$('.version-selectorizor').click(handleRadioButtonClicked);
|
53
|
+
|
54
|
+
$("#matrix").tablesorter({
|
55
|
+
textExtraction : function(node, table, cellIndex){
|
56
|
+
n = $(node);
|
57
|
+
return n.attr('data-sort-value') || n.text();
|
58
|
+
}
|
59
|
+
});
|
60
|
+
});
|
data/script/db-spec.sh
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
{
|
2
|
+
"success": true,
|
3
|
+
"providerApplicationVersion": "1.0.0",
|
4
|
+
"testResults": {
|
5
|
+
"examples": [
|
6
|
+
{
|
7
|
+
"description": "has status code 200",
|
8
|
+
"file_path": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb",
|
9
|
+
"full_description": "Verifying a pact between me and they Greeting with GET / returns a response which has status code 200",
|
10
|
+
"id": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb[1:1:1:1:1]",
|
11
|
+
"line_number": 122,
|
12
|
+
"pending_message": null,
|
13
|
+
"run_time": 0.111762,
|
14
|
+
"status": "passed"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"description": "has a matching body",
|
18
|
+
"file_path": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb",
|
19
|
+
"full_description": "Verifying a pact between me and they Greeting with GET / returns a response which has a matching body",
|
20
|
+
"id": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb[1:1:1:1:3]",
|
21
|
+
"line_number": 139,
|
22
|
+
"pending_message": null,
|
23
|
+
"run_time": 0.000235,
|
24
|
+
"status": "passed"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"description": "has status code 200",
|
28
|
+
"file_path": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb",
|
29
|
+
"full_description": "Verifying a pact between me and they Given There is a greeting Provider state success with GET /somestate returns a response which has status code 200",
|
30
|
+
"id": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb[1:2:1:1:1:1]",
|
31
|
+
"line_number": 122,
|
32
|
+
"pending_message": null,
|
33
|
+
"run_time": 0.006892,
|
34
|
+
"status": "passed"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"description": "has a matching body",
|
38
|
+
"file_path": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb",
|
39
|
+
"full_description": "Verifying a pact between me and they Given There is a greeting Provider state success with GET /somestate returns a response which has a matching body",
|
40
|
+
"id": "/redacted/.gem/ruby/2.4.1/gems/pact-1.17.0/lib/pact/provider/rspec.rb[1:2:1:1:1:3]",
|
41
|
+
"line_number": 139,
|
42
|
+
"pending_message": null,
|
43
|
+
"run_time": 0.000176,
|
44
|
+
"status": "passed"
|
45
|
+
}
|
46
|
+
],
|
47
|
+
"summary": {
|
48
|
+
"duration": 0.123096,
|
49
|
+
"errors_outside_of_examples_count": 0,
|
50
|
+
"example_count": 4,
|
51
|
+
"failure_count": 0,
|
52
|
+
"pending_count": 0
|
53
|
+
},
|
54
|
+
"summary_line": "4 examples, 0 failures",
|
55
|
+
"version": "3.7.0"
|
56
|
+
}
|
57
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'uri'
|
4
|
+
require 'securerandom'
|
5
|
+
require 'logger'
|
6
|
+
require 'sequel'
|
7
|
+
|
8
|
+
uri_string = ARGV[0]
|
9
|
+
database = ARGV[1]
|
10
|
+
raise "Usage: #{__FILE__} URI SQLITE_DATABASE_PATH" unless uri_string && database
|
11
|
+
|
12
|
+
DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: database, :encoding => 'utf8'}
|
13
|
+
|
14
|
+
uri = URI(uri_string)
|
15
|
+
connection = Sequel.connect(DATABASE_CREDENTIALS)
|
16
|
+
|
17
|
+
certificate_command = "openssl s_client -showcerts -servername #{uri.host} -connect #{uri.host}:#{uri.port} </dev/null 2>/dev/null | openssl x509 -outform PEM"
|
18
|
+
certificate_content = `#{certificate_command}`
|
19
|
+
|
20
|
+
puts "Downloaded certificate from #{uri.host}: #{certificate_content}"
|
21
|
+
|
22
|
+
certificate_hash = {
|
23
|
+
uuid: SecureRandom.urlsafe_base64,
|
24
|
+
description: "Self signed certificate for #{uri.host}",
|
25
|
+
content: certificate_content,
|
26
|
+
created_at: DateTime.now,
|
27
|
+
updated_at: DateTime.now
|
28
|
+
}
|
29
|
+
|
30
|
+
connection[:certificates].insert(certificate_hash)
|
31
|
+
|
32
|
+
puts "Done"
|
@@ -0,0 +1,5 @@
|
|
1
|
+
BASE_URL="http://localhost:9292"
|
2
|
+
|
3
|
+
response_body=$(curl ${BASE_URL}/pacts/provider/Bar/consumer/Foo/latest)
|
4
|
+
verification_url=$(echo "${response_body}" | ruby -e "require 'json'; puts JSON.parse(ARGF.read)['_links']['pb:publish-verification-results']['href']")
|
5
|
+
curl -XPOST -H 'Content-Type: application/json' -d@script/foo-bar-verification.json ${verification_url}
|
data/script/seed-matrix.rb
CHANGED
@@ -4,6 +4,7 @@ raise "Please supply database path" unless ARGV[0]
|
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift './lib'
|
6
6
|
$LOAD_PATH.unshift './spec'
|
7
|
+
$LOAD_PATH.unshift './tasks'
|
7
8
|
ENV['RACK_ENV'] = 'development'
|
8
9
|
require 'sequel'
|
9
10
|
require 'logger'
|
@@ -15,11 +16,9 @@ PactBroker::DB.connection = connection
|
|
15
16
|
require 'pact_broker'
|
16
17
|
require 'support/test_data_builder'
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
tables_to_clean.each do | table_name |
|
22
|
-
connection[table_name].delete if connection.table_exists?(table_name)
|
19
|
+
require 'database/table_dependency_calculator'
|
20
|
+
PactBroker::Database::TableDependencyCalculator.call(connection).each do | table_name |
|
21
|
+
connection[table_name].delete
|
23
22
|
end
|
24
23
|
|
25
24
|
=begin
|
@@ -41,6 +40,7 @@ A -> B -> C
|
|
41
40
|
|
42
41
|
TestDataBuilder.new
|
43
42
|
.create_pact_with_hierarchy("A", "1", "B")
|
43
|
+
.create_consumer_version_tag("master")
|
44
44
|
.create_verification(provider_version: '1', success: false)
|
45
45
|
.create_verification(provider_version: '1', number: 2, success: true)
|
46
46
|
.create_verification(provider_version: '2', number: 3)
|
@@ -48,6 +48,7 @@ TestDataBuilder.new
|
|
48
48
|
.create_provider_version("5")
|
49
49
|
.use_consumer("B")
|
50
50
|
.use_consumer_version("1")
|
51
|
+
.create_consumer_version_tag("master")
|
51
52
|
.create_provider("C")
|
52
53
|
.create_pact
|
53
54
|
.create_verification(provider_version: '1', success: false)
|
data/script/seed.rb
CHANGED
@@ -4,6 +4,7 @@ raise "Please supply database path" unless ARGV[0]
|
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift './lib'
|
6
6
|
$LOAD_PATH.unshift './spec'
|
7
|
+
$LOAD_PATH.unshift './tasks'
|
7
8
|
ENV['RACK_ENV'] = 'development'
|
8
9
|
require 'sequel'
|
9
10
|
require 'logger'
|
@@ -15,15 +16,16 @@ PactBroker::DB.connection = connection
|
|
15
16
|
require 'pact_broker'
|
16
17
|
require 'support/test_data_builder'
|
17
18
|
|
19
|
+
# Uncomment these lines to open a pry session for inspecting the database
|
20
|
+
# require 'table_print'
|
21
|
+
# require 'pry'; pry(binding);
|
22
|
+
# exit
|
18
23
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
connection[table_name].delete if connection.table_exists?(table_name)
|
24
|
+
require 'database/table_dependency_calculator'
|
25
|
+
PactBroker::Database::TableDependencyCalculator.call(connection).each do | table_name |
|
26
|
+
connection[table_name].delete
|
23
27
|
end
|
24
28
|
|
25
|
-
|
26
|
-
|
27
29
|
class TestDataBuilder
|
28
30
|
def method_missing *args
|
29
31
|
self
|
@@ -48,59 +50,65 @@ end
|
|
48
50
|
# .create_pact
|
49
51
|
|
50
52
|
|
53
|
+
# .create_webhook(method: 'GET', url: 'https://localhost:9393?url=${pactbroker.pactUrl}', body: '${pactbroker.pactUrl}')
|
54
|
+
TestDataBuilder.new
|
55
|
+
.create_certificate(path: 'spec/fixtures/certificates/self-signed.badssl.com.pem')
|
56
|
+
.create_consumer("Foo")
|
57
|
+
.create_label("microservice")
|
58
|
+
.create_provider("Bar")
|
59
|
+
.create_label("microservice")
|
60
|
+
.create_webhook(method: 'GET', url: 'https://self-signed.badssl.com')
|
61
|
+
.create_consumer_version("1.2.100")
|
62
|
+
.publish_pact
|
63
|
+
.create_verification(provider_version: "1.4.234", success: true, execution_date: DateTime.now - 15)
|
64
|
+
.revise_pact
|
65
|
+
.create_consumer_version("1.2.101")
|
66
|
+
.create_consumer_version_tag('prod')
|
67
|
+
.publish_pact
|
68
|
+
.create_verification(provider_version: "9.9.10", success: false, execution_date: DateTime.now - 15)
|
69
|
+
.create_consumer_version("1.2.102")
|
70
|
+
.publish_pact(created_at: (Date.today - 7).to_datetime)
|
71
|
+
.create_verification(provider_version: "9.9.9", success: true, execution_date: DateTime.now - 14)
|
72
|
+
.create_provider("Animals")
|
73
|
+
.create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
74
|
+
.publish_pact(created_at: (Time.now - 140).to_datetime)
|
75
|
+
.create_verification(provider_version: "2.0.366", execution_date: Date.today - 2) #changed
|
76
|
+
.create_provider("Wiffles")
|
77
|
+
.publish_pact
|
78
|
+
.create_verification(provider_version: "3.6.100", success: false, execution_date: Date.today - 7)
|
79
|
+
.create_provider("Hello World App")
|
80
|
+
.create_consumer_version("1.2.107")
|
81
|
+
.publish_pact(created_at: (Date.today - 1).to_datetime)
|
82
|
+
.create_consumer("The Android App")
|
83
|
+
.create_provider("The back end")
|
84
|
+
.create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
85
|
+
.create_consumer_version("1.2.106")
|
86
|
+
.create_consumer_version_tag("production")
|
87
|
+
.create_consumer_version_tag("feat-x")
|
88
|
+
.publish_pact
|
89
|
+
.create_consumer("Some other app")
|
90
|
+
.create_provider("A service")
|
91
|
+
.create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
92
|
+
.create_triggered_webhook(status: 'success')
|
93
|
+
.create_webhook_execution
|
94
|
+
.create_webhook(method: 'POST', url: 'http://foo:9393/')
|
95
|
+
.create_triggered_webhook(status: 'failure')
|
96
|
+
.create_webhook_execution
|
97
|
+
.create_consumer_version("1.2.106")
|
98
|
+
.publish_pact(created_at: (Date.today - 26).to_datetime)
|
99
|
+
.create_verification(provider_version: "4.8.152", execution_date: DateTime.now)
|
100
|
+
|
51
101
|
# TestDataBuilder.new
|
52
|
-
# .
|
53
|
-
# .
|
54
|
-
# .
|
55
|
-
# .
|
56
|
-
# .
|
57
|
-
# .
|
58
|
-
# .
|
59
|
-
# .create_verification(provider_version: "
|
60
|
-
# .revise_pact
|
61
|
-
# .create_consumer_version("1.2.101")
|
62
|
-
# .create_consumer_version_tag('prod')
|
63
|
-
# .publish_pact
|
64
|
-
# .create_verification(provider_version: "9.9.10", success: false, execution_date: DateTime.now - 15)
|
65
|
-
# .create_consumer_version("1.2.102")
|
66
|
-
# .publish_pact(created_at: (Date.today - 7).to_datetime)
|
67
|
-
# .create_verification(provider_version: "9.9.9", success: true, execution_date: DateTime.now - 14)
|
68
|
-
# .create_provider("Animals")
|
69
|
-
# .create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
70
|
-
# .publish_pact(created_at: (Time.now - 140).to_datetime)
|
71
|
-
# .create_verification(provider_version: "2.0.366", execution_date: Date.today - 2) #changed
|
72
|
-
# .create_provider("Wiffles")
|
73
|
-
# .publish_pact
|
74
|
-
# .create_verification(provider_version: "3.6.100", success: false, execution_date: Date.today - 7)
|
75
|
-
# .create_provider("Hello World App")
|
76
|
-
# .create_consumer_version("1.2.107")
|
77
|
-
# .publish_pact(created_at: (Date.today - 1).to_datetime)
|
78
|
-
# .create_consumer("The Android App")
|
79
|
-
# .create_provider("The back end")
|
80
|
-
# .create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
81
|
-
# .create_consumer_version("1.2.106")
|
82
|
-
# .create_consumer_version_tag("production")
|
83
|
-
# .create_consumer_version_tag("feat-x")
|
84
|
-
# .publish_pact
|
85
|
-
# .create_consumer("Some other app")
|
86
|
-
# .create_provider("A service")
|
87
|
-
# .create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
88
|
-
# .create_triggered_webhook(status: 'success')
|
89
|
-
# .create_webhook_execution
|
90
|
-
# .create_webhook(method: 'POST', url: 'http://foo:9393/')
|
91
|
-
# .create_triggered_webhook(status: 'failure')
|
92
|
-
# .create_webhook_execution
|
93
|
-
# .create_consumer_version("1.2.106")
|
94
|
-
# .publish_pact(created_at: (Date.today - 26).to_datetime)
|
95
|
-
# .create_verification(provider_version: "4.8.152", execution_date: DateTime.now)
|
102
|
+
# .create_pact_with_hierarchy("A", "1", "B")
|
103
|
+
# .create_consumer_version_tag("master")
|
104
|
+
# .create_consumer_version_tag("prod")
|
105
|
+
# .create_verification(provider_version: "1")
|
106
|
+
# .create_consumer_version("2")
|
107
|
+
# .create_consumer_version_tag("master")
|
108
|
+
# .create_pact
|
109
|
+
# .create_verification(provider_version: "2")
|
96
110
|
|
97
|
-
TestDataBuilder.new
|
98
|
-
|
99
|
-
|
100
|
-
.create_consumer_version_tag("prod")
|
101
|
-
.create_verification(provider_version: "1")
|
102
|
-
.create_consumer_version("2")
|
103
|
-
.create_consumer_version_tag("master")
|
104
|
-
.create_pact
|
105
|
-
.create_verification(provider_version: "2")
|
111
|
+
# TestDataBuilder.new
|
112
|
+
# .create_pact_with_hierarchy("Foo", "1", "Bar")
|
113
|
+
# .create_webhook(method: 'GET', url: 'http://localhost:9393', events: [{ name: 'provider_verification_published' }, {name: ''}])
|
106
114
|
|