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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -5
  3. data/README.md +13 -8
  4. data/bethtest.rb +21 -94
  5. data/db/migrations/20171112_add_test_results.rb +7 -0
  6. data/db/migrations/20171117_create_webhook_events.rb +14 -0
  7. data/db/migrations/20171118_create_webhook_events.rb +18 -0
  8. data/db/migrations/20180108_create_certificates_table.rb +14 -0
  9. data/db/migrations/20180109_migrate_trigger_type.rb +9 -0
  10. data/db/pact_broker_database.sqlite3 +0 -0
  11. data/db/test/backwards_compatibility/gemfiles/1.18.0.gemfile.lock +5 -5
  12. data/db/test/backwards_compatibility/gemfiles/2.0.0.gemfile.lock +5 -5
  13. data/db/test/backwards_compatibility/gemfiles/2.1.0.gemfile.lock +5 -5
  14. data/db/test/backwards_compatibility/gemfiles/2.2.0.gemfile.lock +12 -14
  15. data/db/test/backwards_compatibility/gemfiles/2.3.0.gemfile.lock +12 -14
  16. data/db/test/backwards_compatibility/gemfiles/2.4.2.gemfile.lock +12 -14
  17. data/db/test/backwards_compatibility/gemfiles/2.5.1.gemfile.lock +12 -14
  18. data/db/test/backwards_compatibility/gemfiles/2.6.0.gemfile.lock +12 -14
  19. data/db/test/backwards_compatibility/gemfiles/head.gemfile.lock +16 -15
  20. data/db/test/change_migration_strategy/before/Gemfile +1 -0
  21. data/example/README.md +65 -0
  22. data/example/config.ru +1 -0
  23. data/example/example_data.sql +17 -0
  24. data/lib/pact_broker/api.rb +1 -1
  25. data/lib/pact_broker/api/contracts/webhook_contract.rb +9 -1
  26. data/lib/pact_broker/api/decorators/verification_decorator.rb +1 -0
  27. data/lib/pact_broker/api/decorators/webhook_decorator.rb +35 -5
  28. data/lib/pact_broker/api/resources/matrix_badge.rb +21 -0
  29. data/lib/pact_broker/certificates/certificate.rb +8 -0
  30. data/lib/pact_broker/certificates/service.rb +41 -0
  31. data/lib/pact_broker/doc/controllers/app.rb +12 -2
  32. data/lib/pact_broker/doc/views/webhooks.markdown +37 -2
  33. data/lib/pact_broker/domain/verification.rb +2 -0
  34. data/lib/pact_broker/domain/webhook.rb +2 -1
  35. data/lib/pact_broker/domain/webhook_request.rb +22 -4
  36. data/lib/pact_broker/error.rb +5 -0
  37. data/lib/pact_broker/matrix/parse_query.rb +7 -10
  38. data/lib/pact_broker/matrix/repository.rb +5 -32
  39. data/lib/pact_broker/matrix/service.rb +21 -3
  40. data/lib/pact_broker/pacts/repository.rb +9 -2
  41. data/lib/pact_broker/pacts/service.rb +2 -2
  42. data/lib/pact_broker/services.rb +5 -0
  43. data/lib/pact_broker/ui/app.rb +15 -0
  44. data/lib/pact_broker/ui/controllers/matrix.rb +58 -3
  45. data/lib/pact_broker/ui/views/matrix/show.haml +65 -10
  46. data/lib/pact_broker/verifications/service.rb +6 -1
  47. data/lib/pact_broker/version.rb +1 -1
  48. data/lib/pact_broker/webhooks/job.rb +1 -1
  49. data/lib/pact_broker/webhooks/repository.rb +17 -0
  50. data/lib/pact_broker/webhooks/service.rb +8 -7
  51. data/lib/pact_broker/webhooks/triggered_webhook.rb +1 -1
  52. data/lib/pact_broker/webhooks/webhook.rb +3 -0
  53. data/lib/pact_broker/webhooks/webhook_event.rb +24 -0
  54. data/pact_broker.gemspec +2 -1
  55. data/public/javascripts/matrix.js +60 -0
  56. data/public/stylesheets/matrix.css +12 -0
  57. data/script/db-spec.sh +1 -0
  58. data/script/foo-bar-verification.json +57 -0
  59. data/script/insert-self-signed-certificate-from-url.rb +32 -0
  60. data/script/publish-verification.sh +5 -0
  61. data/script/seed-matrix.rb +6 -5
  62. data/script/seed.rb +67 -59
  63. data/spec/features/create_webhook_spec.rb +4 -1
  64. data/spec/features/get_matrix_badge_spec.rb +40 -0
  65. data/spec/features/publish_verification_spec.rb +28 -4
  66. data/spec/fixtures/certificate-invalid.pem +29 -0
  67. data/spec/fixtures/certificate.pem +53 -0
  68. data/spec/fixtures/certificates/cacert.pem +21 -0
  69. data/spec/fixtures/certificates/cert.pem +20 -0
  70. data/spec/fixtures/certificates/key.pem +27 -0
  71. data/spec/fixtures/certificates/self-signed.badssl.com.pem +21 -0
  72. data/spec/fixtures/verification.json +4 -1
  73. data/spec/fixtures/webhook_valid.json +3 -0
  74. data/spec/integration/webhooks/certificate_spec.rb +80 -0
  75. data/spec/lib/pact_broker/api/contracts/webhook_contract_spec.rb +20 -0
  76. data/spec/lib/pact_broker/api/decorators/pact_webhooks_status_decorator_spec.rb +2 -2
  77. data/spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb +5 -0
  78. data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +1 -0
  79. data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +29 -19
  80. data/spec/lib/pact_broker/api/resources/badge_spec.rb +61 -0
  81. data/spec/lib/pact_broker/api/resources/matrix_badge_spec.rb +11 -0
  82. data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +8 -9
  83. data/spec/lib/pact_broker/certificates/service_spec.rb +60 -0
  84. data/spec/lib/pact_broker/domain/verification_spec.rb +13 -0
  85. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +0 -4
  86. data/spec/lib/pact_broker/matrix/service_spec.rb +40 -8
  87. data/spec/lib/pact_broker/pacts/repository_spec.rb +18 -1
  88. data/spec/lib/pact_broker/webhooks/job_spec.rb +1 -1
  89. data/spec/lib/pact_broker/webhooks/repository_spec.rb +53 -13
  90. data/spec/lib/pact_broker/webhooks/service_spec.rb +9 -6
  91. data/spec/migrations/change_migration_strategy_spec.rb +13 -14
  92. data/spec/spec_helper.rb +4 -0
  93. data/spec/support/ssl_webhook_server.rb +37 -0
  94. data/spec/support/test_data_builder.rb +12 -4
  95. data/tasks/database.rb +9 -7
  96. data/tasks/database/table_dependency_calculator.rb +44 -0
  97. metadata +57 -6
  98. data/lib/pact_broker/doc/views/pact-webhooks.markdown +0 -50
  99. data/lib/pact_broker/doc/views/webhooks-create.markdown +0 -38
  100. 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
- PUBLICATION = PactBroker::Webhooks::TriggeredWebhook::TRIGGER_TYPE_PUBLICATION
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.find_by_consumer_and_provider pact.consumer, pact.provider
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, PUBLICATION)
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
- TRIGGER_TYPE_PUBLICATION = 'pact_publication'
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
@@ -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/bethesque/pact_broker"
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
+ });
@@ -0,0 +1,12 @@
1
+ .input-group {
2
+ display: inline-block;
3
+ padding-right: 20px
4
+ }
5
+
6
+ input[type="radio"] {
7
+ /*margin-right: 4px;*/
8
+ }
9
+
10
+ div.top-of-group {
11
+ margin-top: 10px;
12
+ }
@@ -3,5 +3,6 @@ set -e
3
3
  cd db/test/backwards_compatibility
4
4
  export BUNDLE_GEMFILE=$PWD/Gemfile
5
5
  bundle install
6
+ bundle exec appraisal update
6
7
  bundle exec appraisal install
7
8
  bundle exec rake
@@ -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}
@@ -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
- tables_to_clean = [:labels, :webhook_executions, :triggered_webhooks, :verifications, :pact_publications, :pact_versions, :pacts, :pact_version_contents, :tags, :versions, :webhook_headers, :webhooks, :pacticipants]
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)
@@ -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
- tables_to_clean = [:labels, :webhook_executions, :triggered_webhooks, :verifications, :pact_publications, :pact_versions, :pacts, :pact_version_contents, :tags, :versions, :webhook_headers, :webhooks, :pacticipants]
20
-
21
- tables_to_clean.each do | table_name |
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
- # .create_consumer("Foo")
53
- # .create_label("microservice")
54
- # .create_provider("Bar")
55
- # .create_label("microservice")
56
- # .create_webhook(method: 'GET', url: 'http://localhost:9393?url=${pactbroker.pactUrl}', body: '${pactbroker.pactUrl}')
57
- # .create_consumer_version("1.2.100")
58
- # .publish_pact
59
- # .create_verification(provider_version: "1.4.234", success: true, execution_date: DateTime.now - 15)
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
- .create_pact_with_hierarchy("A", "1", "B")
99
- .create_consumer_version_tag("master")
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