pact_broker 2.17.1 → 2.18.0

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