pact_broker 2.50.1 → 2.51.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 +19 -0
- data/config/database.yml +4 -0
- data/lib/pact_broker/api/resources/base_resource.rb +1 -1
- data/lib/pact_broker/badges/service.rb +1 -0
- data/lib/pact_broker/db/clean.rb +14 -1
- data/lib/pact_broker/domain/version.rb +64 -2
- data/lib/pact_broker/matrix/every_row.rb +1 -1
- data/lib/pact_broker/matrix/parse_can_i_deploy_query.rb +4 -3
- data/lib/pact_broker/matrix/parse_query.rb +2 -1
- data/lib/pact_broker/matrix/quick_row.rb +12 -1
- data/lib/pact_broker/matrix/repository.rb +32 -27
- data/lib/pact_broker/matrix/resolved_selector.rb +4 -0
- data/lib/pact_broker/matrix/row.rb +2 -0
- data/lib/pact_broker/matrix/service.rb +6 -6
- data/lib/pact_broker/matrix/unresolved_selector.rb +53 -0
- data/lib/pact_broker/repositories/helpers.rb +4 -0
- data/lib/pact_broker/test/test_data_builder.rb +23 -3
- data/lib/pact_broker/ui/controllers/matrix.rb +2 -1
- data/lib/pact_broker/ui/view_models/matrix_line.rb +2 -2
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/repository.rb +12 -14
- data/lib/pact_broker/webhooks/repository.rb +2 -0
- data/pact_broker.gemspec +2 -2
- data/script/docker/mysql-db-start.sh +0 -0
- data/script/prod/redact-data.sql +15 -7
- data/script/seed.rb +15 -1
- data/spec/features/create_webhook_spec.rb +11 -0
- data/spec/lib/pact_broker/api/decorators/dashboard_decorator_spec.rb +1 -10
- data/spec/lib/pact_broker/api/resources/base_resource_spec.rb +8 -0
- data/spec/lib/pact_broker/badges/service_spec.rb +36 -21
- data/spec/lib/pact_broker/db/clean_spec.rb +30 -98
- data/spec/lib/pact_broker/domain/version_spec.rb +139 -2
- data/spec/lib/pact_broker/integrations/integration_spec.rb +1 -2
- data/spec/lib/pact_broker/matrix/every_row_spec.rb +7 -0
- data/spec/lib/pact_broker/matrix/integration_spec.rb +19 -19
- data/spec/lib/pact_broker/matrix/quick_row_spec.rb +62 -20
- data/spec/lib/pact_broker/matrix/repository_dependency_spec.rb +2 -2
- data/spec/lib/pact_broker/matrix/repository_query_limit_spec.rb +35 -1
- data/spec/lib/pact_broker/matrix/repository_spec.rb +19 -27
- data/spec/lib/pact_broker/matrix/service_spec.rb +4 -3
- data/spec/lib/pact_broker/webhooks/repository_spec.rb +14 -6
- metadata +7 -6
|
@@ -19,6 +19,10 @@ module PactBroker
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def pacticipant_id_for_name pacticipant_name
|
|
23
|
+
Sequel::Model.db[:pacticipants].select(:id).where(name_like(:name, pacticipant_name)).limit(1)
|
|
24
|
+
end
|
|
25
|
+
|
|
22
26
|
def order_ignore_case column_name = :name
|
|
23
27
|
order(Sequel.function(:lower, column_name))
|
|
24
28
|
end
|
|
@@ -150,6 +150,7 @@ module PactBroker
|
|
|
150
150
|
params.delete(:comment)
|
|
151
151
|
tag_names = [params.delete(:tag_names), params.delete(:tag_name)].flatten.compact
|
|
152
152
|
@consumer_version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @consumer)
|
|
153
|
+
set_created_at_if_set params[:created_at], :versions, { id: @consumer_version.id }
|
|
153
154
|
tag_names.each do | tag_name |
|
|
154
155
|
PactBroker::Domain::Tag.create(name: tag_name, version: @consumer_version)
|
|
155
156
|
end
|
|
@@ -210,8 +211,8 @@ module PactBroker
|
|
|
210
211
|
pact_version_sha: pact_version_sha,
|
|
211
212
|
json_content: prepare_json_content(json_content),
|
|
212
213
|
)
|
|
213
|
-
set_created_at_if_set
|
|
214
|
-
set_created_at_if_set
|
|
214
|
+
set_created_at_if_set(params[:created_at], :pact_publications, id: @pact.id)
|
|
215
|
+
set_created_at_if_set(params[:created_at], :pact_versions, sha: @pact.pact_version_sha)
|
|
215
216
|
@pact = PactBroker::Pacts::PactPublication.find(id: @pact.id).to_domain
|
|
216
217
|
self
|
|
217
218
|
end
|
|
@@ -319,9 +320,13 @@ module PactBroker
|
|
|
319
320
|
@verification = PactBroker::Verifications::Repository.new.create(verification, provider_version_number, @pact)
|
|
320
321
|
@provider_version = PactBroker::Domain::Version.where(pacticipant_id: @provider.id, number: provider_version_number).single_record
|
|
321
322
|
|
|
323
|
+
set_created_at_if_set(parameters[:created_at], :verifications, id: @verification.id)
|
|
324
|
+
set_created_at_if_set(parameters[:created_at], :versions, id: @provider_version.id)
|
|
325
|
+
|
|
322
326
|
if tag_names.any?
|
|
323
327
|
tag_names.each do | tag_name |
|
|
324
328
|
PactBroker::Domain::Tag.create(name: tag_name, version: @provider_version)
|
|
329
|
+
set_created_at_if_set(parameters[:created_at], :tags, version_id: @provider_version.id, name: tag_name)
|
|
325
330
|
end
|
|
326
331
|
end
|
|
327
332
|
self
|
|
@@ -354,7 +359,7 @@ module PactBroker
|
|
|
354
359
|
end
|
|
355
360
|
|
|
356
361
|
def set_now date
|
|
357
|
-
@now = date
|
|
362
|
+
@now = date.to_date
|
|
358
363
|
self
|
|
359
364
|
end
|
|
360
365
|
|
|
@@ -363,6 +368,21 @@ module PactBroker
|
|
|
363
368
|
self
|
|
364
369
|
end
|
|
365
370
|
|
|
371
|
+
def add_days(days = 1)
|
|
372
|
+
@now = @now + days
|
|
373
|
+
self
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def subtract_day
|
|
377
|
+
@now = @now - 1
|
|
378
|
+
self
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
def subtract_days(days = 1)
|
|
382
|
+
@now = @now - days
|
|
383
|
+
self
|
|
384
|
+
end
|
|
385
|
+
|
|
366
386
|
def add_minute
|
|
367
387
|
@now = @now + (1.0/(24*60))
|
|
368
388
|
self
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'pact_broker/ui/controllers/base_controller'
|
|
2
2
|
require 'pact_broker/ui/view_models/matrix_lines'
|
|
3
|
+
require 'pact_broker/matrix/unresolved_selector'
|
|
3
4
|
require 'pact_broker/matrix/parse_query'
|
|
4
5
|
require 'pact_broker/logging'
|
|
5
6
|
require 'haml'
|
|
@@ -41,7 +42,7 @@ module PactBroker
|
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
get "/provider/:provider_name/consumer/:consumer_name" do
|
|
44
|
-
selectors = [
|
|
45
|
+
selectors = [ PactBroker::Matrix::UnresolvedSelector.new(pacticipant_name: params[:consumer_name]), PactBroker::Matrix::UnresolvedSelector.new(pacticipant_name: params[:provider_name]) ]
|
|
45
46
|
options = {latestby: 'cvpv', limit: 100}
|
|
46
47
|
lines = matrix_service.find(selectors, options)
|
|
47
48
|
lines = PactBroker::UI::ViewDomain::MatrixLines.new(lines)
|
|
@@ -113,11 +113,11 @@ module PactBroker
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
def orderable_fields
|
|
116
|
-
[
|
|
116
|
+
[@line.last_action_date, @line.pact_created_at]
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
def <=> other
|
|
120
|
-
(
|
|
120
|
+
(orderable_fields <=> other.orderable_fields) * -1
|
|
121
121
|
end
|
|
122
122
|
|
|
123
123
|
def verification_status
|
data/lib/pact_broker/version.rb
CHANGED
|
@@ -17,10 +17,8 @@ module PactBroker
|
|
|
17
17
|
def find_by_pacticipant_name_and_latest_tag pacticipant_name, tag
|
|
18
18
|
PactBroker::Domain::Version
|
|
19
19
|
.select_all_qualified
|
|
20
|
-
.
|
|
21
|
-
.
|
|
22
|
-
.where(name_like(Sequel[:tags][:name], tag))
|
|
23
|
-
.where(name_like(Sequel[:pacticipants][:name], pacticipant_name))
|
|
20
|
+
.where_tag(tag)
|
|
21
|
+
.where_pacticipant_name(pacticipant_name)
|
|
24
22
|
.reverse_order(:order)
|
|
25
23
|
.first
|
|
26
24
|
end
|
|
@@ -28,28 +26,24 @@ module PactBroker
|
|
|
28
26
|
def find_by_pacticipant_name_and_tag pacticipant_name, tag
|
|
29
27
|
PactBroker::Domain::Version
|
|
30
28
|
.select_all_qualified
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
.where(name_like(Sequel[:tags][:name], tag))
|
|
34
|
-
.where(name_like(Sequel[:pacticipants][:name], pacticipant_name))
|
|
29
|
+
.where_pacticipant_name(pacticipant_name)
|
|
30
|
+
.where_tag(tag)
|
|
35
31
|
.all
|
|
36
32
|
end
|
|
37
33
|
|
|
38
34
|
def find_latest_by_pacticpant_name pacticipant_name
|
|
39
35
|
PactBroker::Domain::Version
|
|
40
36
|
.select_all_qualified
|
|
41
|
-
.
|
|
42
|
-
.where(name_like(Sequel[:pacticipants][:name], pacticipant_name))
|
|
37
|
+
.where_pacticipant_name(pacticipant_name)
|
|
43
38
|
.reverse_order(:order)
|
|
44
39
|
.first
|
|
45
40
|
end
|
|
46
41
|
|
|
47
42
|
def find_by_pacticipant_name_and_number pacticipant_name, number
|
|
48
43
|
PactBroker::Domain::Version
|
|
49
|
-
.
|
|
50
|
-
.
|
|
51
|
-
.
|
|
52
|
-
.where(name_like(:name, pacticipant_name))
|
|
44
|
+
.select_all_qualified
|
|
45
|
+
.where_pacticipant_name(pacticipant_name)
|
|
46
|
+
.where_number(number)
|
|
53
47
|
.single_record
|
|
54
48
|
end
|
|
55
49
|
|
|
@@ -91,6 +85,10 @@ module PactBroker
|
|
|
91
85
|
.exclude(id: (version_ids_with_pact_publications + version_ids_with_verifications).uniq)
|
|
92
86
|
.delete
|
|
93
87
|
end
|
|
88
|
+
|
|
89
|
+
def find_versions_for_selector(selector)
|
|
90
|
+
PactBroker::Domain::Version.select_all_qualified.for_selector(selector).all
|
|
91
|
+
end
|
|
94
92
|
end
|
|
95
93
|
end
|
|
96
94
|
end
|
|
@@ -17,6 +17,8 @@ module PactBroker
|
|
|
17
17
|
include Repositories
|
|
18
18
|
|
|
19
19
|
def create uuid, webhook, consumer, provider
|
|
20
|
+
consumer = pacticipant_repository.find_by_name(webhook.consumer.name) if webhook.consumer
|
|
21
|
+
provider = pacticipant_repository.find_by_name(webhook.provider.name) if webhook.provider
|
|
20
22
|
db_webhook = Webhook.from_domain webhook, consumer, provider
|
|
21
23
|
db_webhook.uuid = uuid
|
|
22
24
|
db_webhook.save
|
data/pact_broker.gemspec
CHANGED
|
@@ -70,13 +70,13 @@ Gem::Specification.new do |gem|
|
|
|
70
70
|
gem.add_development_dependency 'bundler-audit', '~>0.4'
|
|
71
71
|
gem.add_development_dependency 'sqlite3', '~>1.3'
|
|
72
72
|
gem.add_development_dependency 'pry-byebug'
|
|
73
|
-
gem.add_development_dependency 'rake', '~>
|
|
73
|
+
gem.add_development_dependency 'rake', '~>12.3.3'
|
|
74
74
|
gem.add_development_dependency 'fakefs', '~>0.4'
|
|
75
75
|
gem.add_development_dependency 'webmock', '~>2.3'
|
|
76
76
|
gem.add_development_dependency 'rspec', '~>3.0'
|
|
77
77
|
gem.add_development_dependency 'rspec-its', '~>1.2'
|
|
78
78
|
gem.add_development_dependency 'database_cleaner', '~>1.8', '>= 1.8.1'
|
|
79
|
-
gem.add_development_dependency 'pg', '~>
|
|
79
|
+
gem.add_development_dependency 'pg', '~>1.2'
|
|
80
80
|
gem.add_development_dependency 'conventional-changelog', '~>1.3'
|
|
81
81
|
gem.add_development_dependency 'bump', '~> 0.5'
|
|
82
82
|
gem.add_development_dependency 'timecop', '~> 0.9'
|
|
File without changes
|
data/script/prod/redact-data.sql
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
UPDATE pacticipants SET name = 'pacticipant-' || id;
|
|
2
|
+
UPDATE pact_versions SET content = '{}';
|
|
3
|
+
UPDATE verifications SET test_results = null;
|
|
4
|
+
DELETE FROM webhook_executions;
|
|
5
|
+
DELETE FROM triggered_webhooks;
|
|
6
|
+
DELETE FROM webhooks;
|
|
7
|
+
DELETE FROM certificates;
|
|
8
|
+
|
|
9
|
+
UPDATE tags
|
|
10
|
+
SET name = temprow.redacted_name
|
|
11
|
+
FROM
|
|
12
|
+
( SELECT name, 'tag-' || ROW_NUMBER () OVER (ORDER BY name) as redacted_name FROM (
|
|
13
|
+
SELECT DISTINCT name FROM tags WHERE lower(name) NOT IN ('master', 'test', 'dev', 'prod', 'production') ORDER BY name
|
|
14
|
+
) as x) as temprow
|
|
15
|
+
WHERE tags.name = temprow.name;
|
data/script/seed.rb
CHANGED
|
@@ -8,7 +8,9 @@ $LOAD_PATH.unshift './tasks'
|
|
|
8
8
|
ENV['RACK_ENV'] = 'development'
|
|
9
9
|
require 'sequel'
|
|
10
10
|
require 'logger'
|
|
11
|
-
|
|
11
|
+
logger = Logger.new($stdout)
|
|
12
|
+
logger = Logger.new(StringIO.new)
|
|
13
|
+
DATABASE_CREDENTIALS = {logger: logger, adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}.tap { |it| puts it }
|
|
12
14
|
#DATABASE_CREDENTIALS = {adapter: "postgres", database: "pact_broker", username: 'pact_broker', password: 'pact_broker', :encoding => 'utf8'}
|
|
13
15
|
|
|
14
16
|
connection = Sequel.connect(DATABASE_CREDENTIALS)
|
|
@@ -42,6 +44,8 @@ webhook_body = {
|
|
|
42
44
|
'githubVerificationStatus' => '${pactbroker.githubVerificationStatus}'
|
|
43
45
|
}
|
|
44
46
|
|
|
47
|
+
PactBroker.configuration.base_equality_only_on_content_that_affects_verification_results = false
|
|
48
|
+
|
|
45
49
|
# .create_global_webhook(
|
|
46
50
|
# method: 'POST',
|
|
47
51
|
# url: "http://localhost:9292/pact-changed-webhook",
|
|
@@ -53,6 +57,16 @@ TestDataBuilder.new
|
|
|
53
57
|
method: 'POST',
|
|
54
58
|
url: "http://localhost:9292/verification-published-webhook",
|
|
55
59
|
body: webhook_body.to_json)
|
|
60
|
+
.set_now(Date.today - 101)
|
|
61
|
+
.tap{ | it |
|
|
62
|
+
100.times do | i |
|
|
63
|
+
it.create_pact_with_verification("Foo", i.to_s, "Bar", i.to_s)
|
|
64
|
+
.create_pact_with_verification("Bar", i.to_s, "Foo", i.to_s)
|
|
65
|
+
.add_day
|
|
66
|
+
end
|
|
67
|
+
}.create_pact_with_hierarchy("Foo", "100", "Bar")
|
|
68
|
+
|
|
69
|
+
|
|
56
70
|
# .create_certificate(path: 'spec/fixtures/certificates/self-signed.badssl.com.pem')
|
|
57
71
|
# .create_consumer("Bethtest")
|
|
58
72
|
# .create_verification_webhook(method: 'GET', url: "http://localhost:9292", body: webhook_body, username: "foo", password: "bar", headers: {"Accept" => "application/json"})
|
|
@@ -108,8 +108,19 @@ describe "Creating a webhook" do
|
|
|
108
108
|
context "with a UUID" do
|
|
109
109
|
let(:path) { "/webhooks/1234123412341234" }
|
|
110
110
|
|
|
111
|
+
before do
|
|
112
|
+
webhook_hash[:provider] = { name: "Some Provider" }
|
|
113
|
+
webhook_hash[:consumer] = { name: "Some Consumer" }
|
|
114
|
+
end
|
|
115
|
+
|
|
111
116
|
subject { put(path, webhook_json, headers) }
|
|
112
117
|
|
|
113
118
|
its(:status) { is_expected.to be 201 }
|
|
119
|
+
|
|
120
|
+
it "is expected to have a consumer and provider" do
|
|
121
|
+
subject
|
|
122
|
+
expect(PactBroker::Webhooks::Webhook.first.consumer).to_not be nil
|
|
123
|
+
expect(PactBroker::Webhooks::Webhook.first.provider).to_not be nil
|
|
124
|
+
end
|
|
114
125
|
end
|
|
115
126
|
end
|
|
@@ -36,16 +36,7 @@ module PactBroker
|
|
|
36
36
|
let(:base_url) { 'http://example.org' }
|
|
37
37
|
let(:options) { { user_options: { base_url: base_url } } }
|
|
38
38
|
let(:dashboard_json) { DashboardDecorator.new([index_item]).to_json(options) }
|
|
39
|
-
let(:created_at) { in_utc { DateTime.new(2018) } }
|
|
40
|
-
|
|
41
|
-
def in_utc
|
|
42
|
-
begin
|
|
43
|
-
ENV['TZ'] = 'UTC'
|
|
44
|
-
yield
|
|
45
|
-
ensure
|
|
46
|
-
ENV['TZ'] = ORIGINAL_TZ
|
|
47
|
-
end
|
|
48
|
-
end
|
|
39
|
+
let(:created_at) { td.in_utc { DateTime.new(2018) } }
|
|
49
40
|
|
|
50
41
|
before do
|
|
51
42
|
allow_any_instance_of(DashboardDecorator).to receive(:pact_url).with(base_url, pact).and_return('pact_url')
|
|
@@ -20,6 +20,14 @@ module PactBroker
|
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
describe "resource_url" do
|
|
24
|
+
let(:uri) { URI('http://example.org/path/?query') }
|
|
25
|
+
|
|
26
|
+
it "cleans the query and trailing slash" do
|
|
27
|
+
expect(subject.resource_url).to eq "http://example.org/path"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
23
31
|
describe "base_url" do
|
|
24
32
|
context "when PactBroker.configuration.base_url is not nil" do
|
|
25
33
|
before do
|
|
@@ -3,31 +3,46 @@ require 'webmock/rspec'
|
|
|
3
3
|
|
|
4
4
|
module PactBroker
|
|
5
5
|
module Badges
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
6
|
+
describe Service do
|
|
7
|
+
let(:pacticipant_name) { "Foo-Bar_Thing Service" }
|
|
8
|
+
let(:pact) { double("pact", consumer_name: "Foo-Bar", provider_name: "Thing_Blah") }
|
|
9
|
+
let(:label) { nil }
|
|
10
|
+
let(:initials) { false }
|
|
11
|
+
let(:pseudo_branch_verification_status) { :success }
|
|
12
|
+
let(:logger) { double('logger').as_null_object }
|
|
13
|
+
let(:expected_url) { "https://img.shields.io/badge/#{expected_left_text}-#{expected_right_text}-#{expected_color}.svg" }
|
|
14
|
+
let(:expected_color) { "brightgreen" }
|
|
15
|
+
let(:expected_right_text) { "verified" }
|
|
16
|
+
let(:expected_left_text) { "foo--bar%2fthing__blah%20pact" }
|
|
17
|
+
let(:response_status) { 200 }
|
|
18
|
+
let!(:http_request) do
|
|
19
|
+
stub_request(:get, expected_url).to_return(:status => response_status, :body => "svg")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
subject { PactBroker::Badges::Service.pact_verification_badge pact, label, initials, pseudo_branch_verification_status }
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
let(:pact_verification_badge_url) { PactBroker::Badges::Service.pact_verification_badge_url(pact, label, initials, pseudo_branch_verification_status) }
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
before do
|
|
27
|
+
Service.clear_cache
|
|
28
|
+
allow(Service).to receive(:logger).and_return(logger)
|
|
29
|
+
end
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
describe "pact_verification_badge_url" do
|
|
32
|
+
context "with the pact is nil" do
|
|
33
|
+
let(:pact) { nil }
|
|
34
|
+
let(:expected_left_text) { "pact%20not%20found" }
|
|
35
|
+
let(:expected_right_text) { "unknown" }
|
|
36
|
+
let(:expected_color) { "lightgrey" }
|
|
37
|
+
let(:pseudo_branch_verification_status) { :never }
|
|
38
|
+
|
|
39
|
+
it "returns a link to a 'pact not found' badge" do
|
|
40
|
+
expect(pact_verification_badge_url).to eq URI(expected_url)
|
|
41
|
+
end
|
|
30
42
|
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "#pact_verification_badge" do
|
|
31
46
|
|
|
32
47
|
it "returns the svg file" do
|
|
33
48
|
expect(subject).to eq "svg"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'pact_broker/db/clean'
|
|
2
|
+
require 'pact_broker/matrix/unresolved_selector'
|
|
2
3
|
|
|
3
4
|
IS_MYSQL = !!DB.mysql?
|
|
4
5
|
|
|
@@ -12,111 +13,42 @@ module PactBroker
|
|
|
12
13
|
subject { Clean.call(PactBroker::DB.connection, options) }
|
|
13
14
|
|
|
14
15
|
describe ".call"do
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
.create_triggered_webhook
|
|
29
|
-
.create_webhook_execution
|
|
30
|
-
.create_verification(provider_version: "30")
|
|
31
|
-
.create_verification_webhook
|
|
32
|
-
.create_triggered_webhook
|
|
33
|
-
.create_webhook_execution
|
|
34
|
-
.create_consumer_version("3")
|
|
35
|
-
.create_pact
|
|
36
|
-
.comment("keep")
|
|
37
|
-
.create_verification(provider_version: "40")
|
|
38
|
-
.create_verification(provider_version: "40", number: 2)
|
|
39
|
-
.create_verification(provider_version: "50", number: 3)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
it "does not delete any rows in the head matrix" do
|
|
44
|
-
head_matrix_before = db[:head_matrix].select_all
|
|
45
|
-
subject
|
|
46
|
-
head_matrix_after = db[:head_matrix].select_all
|
|
47
|
-
expect(head_matrix_before).to eq head_matrix_after
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "deletes rows that aren't the latest or latest tagged" do
|
|
51
|
-
subject
|
|
52
|
-
expect(db[:matrix].where(consumer_version_number: "2").count).to eq 0
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "deletes orphan pact_versions" do
|
|
56
|
-
subject
|
|
57
|
-
expect(db[:pact_versions].count).to eq 2
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "deletes orphan versions" do
|
|
61
|
-
subject
|
|
62
|
-
expect(db[:versions].where(number: "20").count).to be 1
|
|
63
|
-
expect(db[:versions].where(number: "30").count).to be 0
|
|
64
|
-
expect(db[:versions].where(number: "40").count).to be 1
|
|
65
|
-
expect(db[:versions].where(number: "50").count).to be 1
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "deletes overwritten verifications" do
|
|
69
|
-
expect(db[:matrix].where(provider_version_number: "40").count).to eq 2
|
|
70
|
-
subject
|
|
71
|
-
expect(db[:matrix].where(provider_version_number: "40", verification_number: 2).count).to eq 1
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe ".call with a date" do
|
|
76
|
-
before do
|
|
77
|
-
td.set_now(DateTime.new(2019, 1, 1))
|
|
78
|
-
.create_pact_with_hierarchy
|
|
79
|
-
.create_verification
|
|
80
|
-
end
|
|
81
|
-
let(:options) { { date: date } }
|
|
82
|
-
|
|
83
|
-
context "when the data is older than the given date" do
|
|
84
|
-
let(:date) { DateTime.new(2019, 1, 2) }
|
|
85
|
-
let(:expected_report) do
|
|
86
|
-
{
|
|
87
|
-
kept: { pact_publications: 0, verification_results: 0 },
|
|
88
|
-
deleted: { pact_publications: 1, verification_results: 1 }
|
|
89
|
-
}
|
|
16
|
+
context "when there are specified versions to keep" do
|
|
17
|
+
before do
|
|
18
|
+
td.create_pact_with_hierarchy("Foo", "1", "Bar")
|
|
19
|
+
.create_consumer_version_tag("prod")
|
|
20
|
+
.create_consumer_version_tag("master")
|
|
21
|
+
.create_consumer_version("3", tag_names: %w{prod})
|
|
22
|
+
.create_pact
|
|
23
|
+
.create_consumer_version("4", tag_names: %w{master})
|
|
24
|
+
.create_pact
|
|
25
|
+
.create_consumer_version("5", tag_names: %w{master})
|
|
26
|
+
.create_pact
|
|
27
|
+
.create_consumer_version("6", tag_names: %w{foo})
|
|
28
|
+
.create_pact
|
|
90
29
|
end
|
|
91
30
|
|
|
92
|
-
|
|
93
|
-
subject
|
|
94
|
-
expect(db[:head_matrix].count).to be 0
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "returns a report" do
|
|
98
|
-
expect(subject).to include(expected_report)
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
context "when the data is not older than the given date" do
|
|
103
|
-
let(:date) { DateTime.new(2019, 1, 1) }
|
|
104
|
-
let(:expected_report) do
|
|
31
|
+
let(:options) do
|
|
105
32
|
{
|
|
106
|
-
|
|
107
|
-
|
|
33
|
+
keep: [
|
|
34
|
+
PactBroker::Matrix::UnresolvedSelector.new(tag: "prod"),
|
|
35
|
+
PactBroker::Matrix::UnresolvedSelector.new(tag: "master", latest: true)
|
|
36
|
+
]
|
|
108
37
|
}
|
|
109
38
|
end
|
|
110
39
|
|
|
111
|
-
it "
|
|
40
|
+
it "does not delete the consumer versions specified" do
|
|
41
|
+
expect(PactBroker::Domain::Version.where(number: "1").count).to be 1
|
|
42
|
+
expect(PactBroker::Domain::Version.where(number: "3").count).to be 1
|
|
43
|
+
expect(PactBroker::Domain::Version.where(number: "4").count).to be 1
|
|
44
|
+
expect(PactBroker::Domain::Version.where(number: "5").count).to be 1
|
|
45
|
+
expect(PactBroker::Domain::Version.where(number: "6").count).to be 1
|
|
112
46
|
subject
|
|
113
|
-
expect(
|
|
114
|
-
expect(
|
|
115
|
-
expect(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
it "returns a report" do
|
|
119
|
-
expect(subject).to include(expected_report)
|
|
47
|
+
expect(PactBroker::Domain::Version.where(number: "1").count).to be 1
|
|
48
|
+
expect(PactBroker::Domain::Version.where(number: "3").count).to be 1
|
|
49
|
+
expect(PactBroker::Domain::Version.where(number: "4").count).to be 0
|
|
50
|
+
expect(PactBroker::Domain::Version.where(number: "5").count).to be 1
|
|
51
|
+
expect(PactBroker::Domain::Version.where(number: "6").count).to be 0
|
|
120
52
|
end
|
|
121
53
|
end
|
|
122
54
|
end
|