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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/config/database.yml +4 -0
  4. data/lib/pact_broker/api/resources/base_resource.rb +1 -1
  5. data/lib/pact_broker/badges/service.rb +1 -0
  6. data/lib/pact_broker/db/clean.rb +14 -1
  7. data/lib/pact_broker/domain/version.rb +64 -2
  8. data/lib/pact_broker/matrix/every_row.rb +1 -1
  9. data/lib/pact_broker/matrix/parse_can_i_deploy_query.rb +4 -3
  10. data/lib/pact_broker/matrix/parse_query.rb +2 -1
  11. data/lib/pact_broker/matrix/quick_row.rb +12 -1
  12. data/lib/pact_broker/matrix/repository.rb +32 -27
  13. data/lib/pact_broker/matrix/resolved_selector.rb +4 -0
  14. data/lib/pact_broker/matrix/row.rb +2 -0
  15. data/lib/pact_broker/matrix/service.rb +6 -6
  16. data/lib/pact_broker/matrix/unresolved_selector.rb +53 -0
  17. data/lib/pact_broker/repositories/helpers.rb +4 -0
  18. data/lib/pact_broker/test/test_data_builder.rb +23 -3
  19. data/lib/pact_broker/ui/controllers/matrix.rb +2 -1
  20. data/lib/pact_broker/ui/view_models/matrix_line.rb +2 -2
  21. data/lib/pact_broker/version.rb +1 -1
  22. data/lib/pact_broker/versions/repository.rb +12 -14
  23. data/lib/pact_broker/webhooks/repository.rb +2 -0
  24. data/pact_broker.gemspec +2 -2
  25. data/script/docker/mysql-db-start.sh +0 -0
  26. data/script/prod/redact-data.sql +15 -7
  27. data/script/seed.rb +15 -1
  28. data/spec/features/create_webhook_spec.rb +11 -0
  29. data/spec/lib/pact_broker/api/decorators/dashboard_decorator_spec.rb +1 -10
  30. data/spec/lib/pact_broker/api/resources/base_resource_spec.rb +8 -0
  31. data/spec/lib/pact_broker/badges/service_spec.rb +36 -21
  32. data/spec/lib/pact_broker/db/clean_spec.rb +30 -98
  33. data/spec/lib/pact_broker/domain/version_spec.rb +139 -2
  34. data/spec/lib/pact_broker/integrations/integration_spec.rb +1 -2
  35. data/spec/lib/pact_broker/matrix/every_row_spec.rb +7 -0
  36. data/spec/lib/pact_broker/matrix/integration_spec.rb +19 -19
  37. data/spec/lib/pact_broker/matrix/quick_row_spec.rb +62 -20
  38. data/spec/lib/pact_broker/matrix/repository_dependency_spec.rb +2 -2
  39. data/spec/lib/pact_broker/matrix/repository_query_limit_spec.rb +35 -1
  40. data/spec/lib/pact_broker/matrix/repository_spec.rb +19 -27
  41. data/spec/lib/pact_broker/matrix/service_spec.rb +4 -3
  42. data/spec/lib/pact_broker/webhooks/repository_spec.rb +14 -6
  43. 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 params[:created_at], :pact_publications, {id: @pact.id}
214
- set_created_at_if_set params[:created_at], :pact_versions, {sha: @pact.pact_version_sha}
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 = [{ pacticipant_name: params[:consumer_name] }, { pacticipant_name: params[:provider_name] } ]
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
- [consumer_name, consumer_version_order, pact_revision_number, provider_name, @line.verification_id]
116
+ [@line.last_action_date, @line.pact_created_at]
117
117
  end
118
118
 
119
119
  def <=> other
120
- (self.orderable_fields <=> other.orderable_fields) * -1
120
+ (orderable_fields <=> other.orderable_fields) * -1
121
121
  end
122
122
 
123
123
  def verification_status
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.50.1'
2
+ VERSION = '2.51.0'
3
3
  end
@@ -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
- .join(:pacticipants, {id: :pacticipant_id}, {implicit_qualifier: :versions})
21
- .join(:tags, {version_id: :id}, {implicit_qualifier: :versions})
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
- .join(:pacticipants, {id: :pacticipant_id}, {implicit_qualifier: :versions})
32
- .join(:tags, {version_id: :id}, {implicit_qualifier: :versions})
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
- .join(:pacticipants, {id: :pacticipant_id}, {implicit_qualifier: :versions})
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
- .select(Sequel[:versions][:id], Sequel[:versions][:number], Sequel[:versions][:pacticipant_id], Sequel[:versions][:order], Sequel[:versions][:created_at], Sequel[:versions][:updated_at])
50
- .join(:pacticipants, {id: :pacticipant_id})
51
- .where(name_like(:number, number))
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', '~>10.0'
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', '~>0.21'
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
@@ -1,7 +1,15 @@
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;
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
- DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}.tap { |it| puts it }
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
- module Service
7
- describe "#pact_verification_badge" do
8
- let(:pacticipant_name) { "Foo-Bar_Thing Service" }
9
- let(:pact) { double("pact", consumer_name: "Foo-Bar", provider_name: "Thing_Blah") }
10
- let(:label) { nil }
11
- let(:initials) { false }
12
- let(:pseudo_branch_verification_status) { :success }
13
- let(:logger) { double('logger').as_null_object }
14
- let(:expected_url) { "https://img.shields.io/badge/#{expected_left_text}-#{expected_right_text}-#{expected_color}.svg" }
15
- let(:expected_color) { "brightgreen" }
16
- let(:expected_right_text) { "verified" }
17
- let(:expected_left_text) { "foo--bar%2fthing__blah%20pact" }
18
- let(:response_status) { 200 }
19
- let!(:http_request) do
20
- stub_request(:get, expected_url).to_return(:status => response_status, :body => "svg")
21
- end
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
- subject { PactBroker::Badges::Service.pact_verification_badge pact, label, initials, pseudo_branch_verification_status }
24
+ let(:pact_verification_badge_url) { PactBroker::Badges::Service.pact_verification_badge_url(pact, label, initials, pseudo_branch_verification_status) }
24
25
 
25
- let(:pact_verification_badge_url) { PactBroker::Badges::Service.pact_verification_badge_url(pact, label, initials, pseudo_branch_verification_status) }
26
+ before do
27
+ Service.clear_cache
28
+ allow(Service).to receive(:logger).and_return(logger)
29
+ end
26
30
 
27
- before do
28
- Service.clear_cache
29
- allow(Service).to receive(:logger).and_return(logger)
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
- before do
17
- td.create_pact_with_hierarchy("Foo", "0", "Bar")
18
- .create_consumer_version_tag("prod")
19
- .create_consumer_version("1")
20
- .create_pact
21
- .create_consumer_version_tag("prod")
22
- .comment("keep")
23
- .create_verification(provider_version: "20")
24
- .create_consumer_version("2")
25
- .create_pact
26
- .comment("don't keep")
27
- .create_webhook
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
- it "is deleted" do
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
- kept: { pact_publications: 1, verification_results: 1 },
107
- deleted: { pact_publications: 0, verification_results: 0 }
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 "is not deleted" do
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(db[:head_matrix].count).to be 1
114
- expect(db[:pact_publications].count).to be 1
115
- expect(db[:verifications].count).to be 1
116
- end
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