pact_broker 2.17.1 → 2.18.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a869eaa0a554166e06aee39ab94e7ee77fa48d0f
4
- data.tar.gz: a1f4f9e64f229185ec16354b6e28c2984d180eb4
3
+ metadata.gz: be2a40680787302de6ff629cc8522bed68b57c86
4
+ data.tar.gz: e5fe341fb89a53b5a5b93ba801bfaad429fa34d6
5
5
  SHA512:
6
- metadata.gz: 259b1a5d60d2372ee9cec9e477d35e2d5033d95aab058766b32be05509dd6c208542415bf8d19b5279ca96e8b826169d4ef3b8afc88271fe8a2a81abc25f60ac
7
- data.tar.gz: d18d5d92867f0dcabfc47256451e78a801877a0d09fe7ac1540be3b32da4db33acebb4b5dc635dd8047af7635c195b1cf0ac4f0927dd9018f49a093b157e0ced
6
+ metadata.gz: 40bbfae215d62a2bbed81cdcae2e76236f1c952d5a7b274cb9811052b1a03e29b81e4feb344be5f7e62827c009d913ed057e6a3b0a8006b3a769774b2062c495
7
+ data.tar.gz: e7867be0091b5ca6e2748f032c0964f1a2409ecdb1f7d578f8dbdf071f6f35c7d4706f82a8333dc37133566027cb951436c3e18752388cb8d7bb3b40475d761f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ <a name="v2.18.0"></a>
2
+ ### v2.18.0 (2018-04-05)
3
+
4
+
5
+ #### Features
6
+
7
+ * add link to matrix from HTML pact page ([f9e3c23](/../../commit/f9e3c23))
8
+ * sort tags in dashboard API response ([d2fd090](/../../commit/d2fd090))
9
+ * add rake task to clean unused data to improve performance ([fc705a2](/../../commit/fc705a2))
10
+
11
+
12
+ #### Bug Fixes
13
+
14
+ * show JSON view when *any* error occurs creating the HTML view for a pact. ([e4342f0](/../../commit/e4342f0))
15
+ * only show verification matrix number when verification is present ([766f7c0](/../../commit/766f7c0))
16
+ * correctly display interaction with nil description in HTML view ([56528d3](/../../commit/56528d3))
17
+
18
+
1
19
  <a name="v2.17.1"></a>
2
20
  ### v2.17.1 (2018-03-30)
3
21
 
@@ -8,7 +8,7 @@ module Pact
8
8
  private
9
9
 
10
10
  def self.sortable_id interaction
11
- "#{interaction.description.downcase} #{interaction.response.status} #{(interaction.provider_state || '').downcase}"
11
+ "#{(interaction.description || '').downcase} #{interaction.response.status} #{(interaction.provider_state || '').downcase}"
12
12
  end
13
13
  end
14
14
  end
@@ -112,7 +112,7 @@ module PactBroker
112
112
  end
113
113
 
114
114
  def pact_tags(index_item, base_url)
115
- index_item.tag_names.collect do | tag_name |
115
+ index_item.tag_names.sort.collect do | tag_name |
116
116
  fake_tag = OpenStruct.new(name: tag_name, version: index_item.consumer_version)
117
117
  {
118
118
  name: tag_name,
@@ -127,7 +127,7 @@ module PactBroker
127
127
  end
128
128
 
129
129
  def verification_tags(index_item, base_url)
130
- index_item.latest_verification_latest_tags.collect do | tag |
130
+ index_item.latest_verification_latest_tags.sort{ |t1, t2| t1.name <=> t2.name }.collect do | tag |
131
131
  fake_tag = OpenStruct.new(name: tag.name, version: index_item.provider_version)
132
132
  {
133
133
  name: tag.name,
@@ -160,10 +160,14 @@ module PactBroker
160
160
  "#{base_url}/webhooks/#{triggered_webhook.webhook_uuid}/trigger/#{triggered_webhook.trigger_uuid}/logs"
161
161
  end
162
162
 
163
- def badge_url_for_latest_pact pact, base_url = ''
163
+ def badge_url_for_latest_pact pact, base_url = ''
164
164
  "#{latest_pact_url(base_url, pact)}/badge.svg"
165
165
  end
166
166
 
167
+ def matrix_url_from_params params, base_url = ''
168
+ "#{base_url}/matrix/provider/#{url_encode(params.fetch(:provider_name))}/consumer/#{url_encode(params.fetch(:consumer_name))}"
169
+ end
170
+
167
171
  def hal_browser_url target_url
168
172
  "/hal-browser/browser.html#" + target_url
169
173
  end
@@ -63,6 +63,9 @@ module PactBroker
63
63
  <li>
64
64
  <a href=\"#{json_url}\">View in API Browser</a>
65
65
  </li>
66
+ <li>
67
+ <a href=\"#{matrix_url}\">View Matrix</a>
68
+ </li>
66
69
  <li>
67
70
  <a href=\"/\">Home</a>
68
71
  </li>
@@ -120,6 +123,10 @@ module PactBroker
120
123
  PactBroker::Api::PactBrokerUrls.pact_url '', @pact
121
124
  end
122
125
 
126
+ def matrix_url
127
+ PactBroker::Api::PactBrokerUrls.matrix_url_from_params consumer_name: @pact.consumer.name, provider_name: @pact.provider.name
128
+ end
129
+
123
130
  def badge_target_url
124
131
  base_url
125
132
  end
@@ -138,9 +145,9 @@ module PactBroker
138
145
 
139
146
  def markdown
140
147
  Pact::Doc::Markdown::ConsumerContractRenderer.call consumer_contract
141
- rescue NotAPactError
148
+ rescue StandardError
142
149
  heading = "### A contract between #{@pact.consumer.name} and #{@pact.provider.name}"
143
- warning = "_Note: this contract could not be parsed to a Pact, showing raw content instead._"
150
+ warning = "_Note: this contract could not be parsed to a v1 or v2 Pact, showing raw content instead._"
144
151
  pretty_json = JSON.pretty_generate(@pact.content_hash)
145
152
  "#{heading}\n#{warning}\n```json\n#{pretty_json}\n```\n"
146
153
  end
@@ -0,0 +1,49 @@
1
+ require 'sequel'
2
+ require 'pact_broker/project_root'
3
+
4
+ module PactBroker
5
+ module DB
6
+ class Clean
7
+ def self.call database_connection, options = {}
8
+ new(database_connection, options).call
9
+ end
10
+
11
+ def initialize database_connection, options = {}
12
+ @db = database_connection
13
+ @options = options
14
+ end
15
+
16
+ def call
17
+ db[:verifications].where(id: db[:materialized_head_matrix].select(:verification_id)).invert.delete
18
+ pp_ids = db[:materialized_head_matrix].select(:pact_publication_id)
19
+
20
+ triggered_webhook_ids = db[:triggered_webhooks].where(pact_publication_id: pp_ids).invert.select(:id)
21
+ db[:webhook_executions].where(triggered_webhook_id: triggered_webhook_ids).delete
22
+ db[:triggered_webhooks].where(id: triggered_webhook_ids).delete
23
+ db[:webhook_executions].where(pact_publication_id: pp_ids).invert.delete
24
+
25
+ db[:pact_publications].where(id: pp_ids).invert.delete
26
+
27
+ referenced_pact_version_ids = db[:pact_publications].select(:pact_version_id).collect{ | h| h[:pact_version_id] } +
28
+ db[:verifications].select(:pact_version_id).collect{ | h| h[:pact_version_id] }
29
+ db[:pact_versions].where(id: referenced_pact_version_ids).invert.delete
30
+
31
+ referenced_version_ids = db[:pact_publications].select(:consumer_version_id).collect{ | h| h[:consumer_version_id] } +
32
+ db[:verifications].select(:provider_version_id).collect{ | h| h[:provider_version_id] }
33
+
34
+ db[:tags].where(version_id: referenced_version_ids).invert.delete
35
+ db[:versions].where(id: referenced_version_ids).invert.delete
36
+
37
+ db[:materialized_matrix].delete
38
+ db[:materialized_matrix].insert(db[:matrix].select_all)
39
+ db[:materialized_head_matrix].delete
40
+ db[:materialized_head_matrix].insert(db[:head_matrix].select_all)
41
+ end
42
+
43
+ private
44
+
45
+ attr_reader :db
46
+
47
+ end
48
+ end
49
+ end
@@ -1,2 +1,3 @@
1
1
  require 'pact_broker/tasks/migration_task'
2
2
  require 'pact_broker/tasks/version_task'
3
+ require 'pact_broker/tasks/clean_task'
@@ -0,0 +1,25 @@
1
+ module PactBroker
2
+ module DB
3
+ class CleanTask < ::Rake::TaskLib
4
+
5
+ attr_accessor :database_connection
6
+
7
+ def initialize &block
8
+ rake_task &block
9
+ end
10
+
11
+ def rake_task &block
12
+ namespace :pact_broker do
13
+ namespace :db do
14
+ desc "Clean unused pacts and verifications from database"
15
+ task :clean do | t, args |
16
+ require 'pact_broker/db/clean'
17
+ instance_eval(&block)
18
+ PactBroker::DB::Clean.call(database_connection)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -144,7 +144,7 @@
144
144
  = tag.name
145
145
  %td.verification-result{class: line.verification_status_class, "title": line.inherited_verification_message, "data-toggle": "tooltip"}
146
146
  %a{href: line.verification_status_url}
147
- - if options.all_rows_checked
147
+ - if options.all_rows_checked && line.number
148
148
  = "#{line.verification_status} (number #{line.number})"
149
149
  - else
150
150
  = line.verification_status
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.17.1'
2
+ VERSION = '2.18.0'
3
3
  end
@@ -0,0 +1,65 @@
1
+ require 'pact_broker/db/clean'
2
+
3
+ IS_MYSQL = !!DB.mysql?
4
+
5
+ module PactBroker
6
+ module DB
7
+ describe Clean do
8
+ # Inner queries don't work on MySQL. Seriously, MySQL???
9
+ describe ".call", pending: IS_MYSQL do
10
+ let(:td) { TestDataBuilder.new }
11
+ let(:db) { PactBroker::DB.connection }
12
+
13
+ before do
14
+ td.create_pact_with_hierarchy("Foo", "0", "Bar")
15
+ .create_consumer_version_tag("prod")
16
+ .create_consumer_version("1")
17
+ .create_pact
18
+ .create_consumer_version_tag("prod")
19
+ .comment("keep")
20
+ .create_verification(provider_version: "20")
21
+ .create_consumer_version("2")
22
+ .create_pact
23
+ .comment("don't keep")
24
+ .create_webhook
25
+ .create_triggered_webhook
26
+ .create_webhook_execution
27
+ .create_deprecated_webhook_execution
28
+ .create_verification(provider_version: "30")
29
+ .create_consumer_version("3")
30
+ .create_pact
31
+ .comment("keep")
32
+ .create_verification(provider_version: "40")
33
+ .create_verification(provider_version: "50", number: 2)
34
+ end
35
+
36
+ subject { Clean.call(PactBroker::DB.connection) }
37
+
38
+ it "does not delete any rows in the head matrix" do
39
+ head_matrix_before = db[:head_matrix].select_all
40
+ subject
41
+ head_matrix_after = db[:head_matrix].select_all
42
+ expect(head_matrix_before).to eq head_matrix_after
43
+ end
44
+
45
+ it "deletes rows that aren't the latest or latest tagged" do
46
+ subject
47
+ expect(db[:materialized_matrix].where(consumer_version_number: "2").count).to eq 0
48
+ end
49
+
50
+ it "deletes orphan pact_versions" do
51
+ subject
52
+ expect(db[:pact_versions].count).to eq 2
53
+ end
54
+
55
+ it "deletes orphan versions" do
56
+ subject
57
+ expect(db[:versions].where(number: "20").count).to be 1
58
+ expect(db[:versions].where(number: "30").count).to be 0
59
+ expect(db[:versions].where(number: "40").count).to be 0
60
+ expect(db[:versions].where(number: "50").count).to be 1
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
data/tasks/test_db.rake CHANGED
@@ -1,11 +1,19 @@
1
1
  require 'pact_broker/tasks'
2
2
 
3
3
  PactBroker::DB::MigrationTask.new do | task |
4
+ ENV['RACK_ENV'] ||= 'test'
4
5
  require 'db'
5
6
  task.database_connection = DB::PACT_BROKER_DB
6
7
  end
7
8
 
8
9
  PactBroker::DB::VersionTask.new do | task |
10
+ ENV['RACK_ENV'] ||= 'test'
11
+ require 'db'
12
+ task.database_connection = DB::PACT_BROKER_DB
13
+ end
14
+
15
+ PactBroker::DB::CleanTask.new do | task |
16
+ ENV['RACK_ENV'] ||= 'test'
9
17
  require 'db'
10
18
  task.database_connection = DB::PACT_BROKER_DB
11
19
  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.17.1
4
+ version: 2.18.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-03-30 00:00:00.000000000 Z
13
+ date: 2018-04-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
@@ -765,6 +765,7 @@ files:
765
765
  - lib/pact_broker/dashboard/service.rb
766
766
  - lib/pact_broker/date_helper.rb
767
767
  - lib/pact_broker/db.rb
768
+ - lib/pact_broker/db/clean.rb
768
769
  - lib/pact_broker/db/migrate.rb
769
770
  - lib/pact_broker/db/validate_encoding.rb
770
771
  - lib/pact_broker/db/version.rb
@@ -841,6 +842,7 @@ files:
841
842
  - lib/pact_broker/tags/service.rb
842
843
  - lib/pact_broker/tags/tag_with_latest_flag.rb
843
844
  - lib/pact_broker/tasks.rb
845
+ - lib/pact_broker/tasks/clean_task.rb
844
846
  - lib/pact_broker/tasks/migration_task.rb
845
847
  - lib/pact_broker/tasks/version_task.rb
846
848
  - lib/pact_broker/ui.rb
@@ -1069,6 +1071,7 @@ files:
1069
1071
  - spec/lib/pact_broker/config/save_and_load_spec.rb
1070
1072
  - spec/lib/pact_broker/config/save_spec.rb
1071
1073
  - spec/lib/pact_broker/configuration_spec.rb
1074
+ - spec/lib/pact_broker/db/clean_spec.rb
1072
1075
  - spec/lib/pact_broker/db/validate_encoding_spec.rb
1073
1076
  - spec/lib/pact_broker/diagnostic/resources/dependencies_spec.rb
1074
1077
  - spec/lib/pact_broker/diagnostic/resources/heartbeat_spec.rb
@@ -1346,6 +1349,7 @@ test_files:
1346
1349
  - spec/lib/pact_broker/config/save_and_load_spec.rb
1347
1350
  - spec/lib/pact_broker/config/save_spec.rb
1348
1351
  - spec/lib/pact_broker/configuration_spec.rb
1352
+ - spec/lib/pact_broker/db/clean_spec.rb
1349
1353
  - spec/lib/pact_broker/db/validate_encoding_spec.rb
1350
1354
  - spec/lib/pact_broker/diagnostic/resources/dependencies_spec.rb
1351
1355
  - spec/lib/pact_broker/diagnostic/resources/heartbeat_spec.rb