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 +4 -4
- data/CHANGELOG.md +18 -0
- data/lib/pact/doc/sort_interactions.rb +1 -1
- data/lib/pact_broker/api/decorators/dashboard_decorator.rb +2 -2
- data/lib/pact_broker/api/pact_broker_urls.rb +5 -1
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +9 -2
- data/lib/pact_broker/db/clean.rb +49 -0
- data/lib/pact_broker/tasks.rb +1 -0
- data/lib/pact_broker/tasks/clean_task.rb +25 -0
- data/lib/pact_broker/ui/views/matrix/show.haml +1 -1
- data/lib/pact_broker/version.rb +1 -1
- data/spec/lib/pact_broker/db/clean_spec.rb +65 -0
- data/tasks/test_db.rake +8 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be2a40680787302de6ff629cc8522bed68b57c86
|
4
|
+
data.tar.gz: e5fe341fb89a53b5a5b93ba801bfaad429fa34d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
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
|
data/lib/pact_broker/tasks.rb
CHANGED
@@ -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
|
data/lib/pact_broker/version.rb
CHANGED
@@ -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.
|
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-
|
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
|