pact_broker 2.71.0 → 2.72.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +1 -21
- data/CHANGELOG.md +11 -0
- data/Dockerfile +5 -1
- data/docker-compose-ci-mysql.yml +37 -0
- data/lib/pact_broker/api/pact_broker_urls.rb +5 -1
- data/lib/pact_broker/api/resources/metadata_resource_methods.rb +23 -0
- data/lib/pact_broker/api/resources/pact.rb +2 -13
- data/lib/pact_broker/api/resources/pact_resource_methods.rb +23 -0
- data/lib/pact_broker/api/resources/pact_version.rb +3 -0
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
- data/lib/pact_broker/api/resources/verifications.rb +2 -4
- data/lib/pact_broker/db/clean_incremental.rb +132 -22
- data/lib/pact_broker/db/delete_overwritten_data.rb +55 -27
- data/lib/pact_broker/domain/tag.rb +42 -0
- data/lib/pact_broker/domain/verification.rb +87 -0
- data/lib/pact_broker/metrics/service.rb +5 -3
- data/lib/pact_broker/pacts/all_pact_publications.rb +8 -0
- data/lib/pact_broker/pacts/repository.rb +35 -11
- data/lib/pact_broker/tasks/clean_task.rb +9 -3
- data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +23 -7
- data/lib/pact_broker/test/test_data_builder.rb +24 -0
- data/lib/pact_broker/version.rb +1 -1
- data/script/docker-container/test.sh +3 -0
- data/script/docker/db-psql.sh +3 -0
- data/script/docker/db-reload.sh +11 -0
- data/script/pry.rb +25 -0
- data/script/seed.rb +1 -0
- data/script/test/run-rake-on-docker-compose-mysql.sh +8 -0
- data/spec/features/delete_tagged_pact_versions_spec.rb +2 -2
- data/spec/features/get_pact_spec.rb +2 -2
- data/spec/features/get_pact_version.rb +26 -3
- data/spec/fixtures/approvals/clean_incremental_dry_run.approved.json +100 -0
- data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +6 -0
- data/spec/lib/pact_broker/api/resources/pact_spec.rb +20 -9
- data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +10 -2
- data/spec/lib/pact_broker/api/resources/verifications_spec.rb +7 -3
- data/spec/lib/pact_broker/db/clean_incremental_spec.rb +9 -1
- data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +71 -11
- data/spec/lib/pact_broker/domain/tag_spec.rb +23 -9
- data/spec/lib/pact_broker/domain/verification_spec.rb +49 -0
- data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
- data/spec/lib/pact_broker/pacts/repository_spec.rb +54 -7
- data/spec/migrations/change_migration_strategy_spec.rb +1 -1
- metadata +12 -2
@@ -40,6 +40,7 @@ module PactBroker
|
|
40
40
|
attr_reader :provider_version
|
41
41
|
attr_reader :version
|
42
42
|
attr_reader :pact
|
43
|
+
attr_reader :pact_version
|
43
44
|
attr_reader :verification
|
44
45
|
attr_reader :webhook
|
45
46
|
attr_reader :webhook_execution
|
@@ -96,6 +97,15 @@ module PactBroker
|
|
96
97
|
self
|
97
98
|
end
|
98
99
|
|
100
|
+
def create_pact_with_verification_and_tags consumer_name = "Consumer", consumer_version = "1.0.#{model_counter}", consumer_version_tags = [], provider_name = "Provider", provider_version = "1.0.#{model_counter}", provider_version_tags = []
|
101
|
+
create_pact_with_hierarchy(consumer_name, consumer_version, provider_name)
|
102
|
+
consumer_version_tags.each do | tag |
|
103
|
+
create_consumer_version_tag(tag)
|
104
|
+
end
|
105
|
+
create_verification(number: model_counter, provider_version: provider_version, tag_names: provider_version_tags)
|
106
|
+
self
|
107
|
+
end
|
108
|
+
|
99
109
|
def create_version_with_hierarchy pacticipant_name, pacticipant_version
|
100
110
|
pacticipant = pacticipant_service.create(:name => pacticipant_name)
|
101
111
|
version = PactBroker::Domain::Version.create(:number => pacticipant_version, :pacticipant => pacticipant)
|
@@ -237,6 +247,20 @@ module PactBroker
|
|
237
247
|
self
|
238
248
|
end
|
239
249
|
|
250
|
+
def create_pact_version_without_publication(json_content = nil )
|
251
|
+
json_content = json_content ? json_content : {random: rand}.to_json
|
252
|
+
pact_version_sha = generate_pact_version_sha(json_content)
|
253
|
+
|
254
|
+
@pact_version = PactBroker::Pacts::PactVersion.new(
|
255
|
+
consumer_id: consumer.id,
|
256
|
+
provider_id: provider.id,
|
257
|
+
sha: pact_version_sha,
|
258
|
+
content: json_content,
|
259
|
+
created_at: Sequel.datetime_class.now
|
260
|
+
).save
|
261
|
+
self
|
262
|
+
end
|
263
|
+
|
240
264
|
def create_webhook parameters = {}
|
241
265
|
params = parameters.dup
|
242
266
|
consumer = params.key?(:consumer) ? params.delete(:consumer) : @consumer
|
data/lib/pact_broker/version.rb
CHANGED
data/script/pry.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# raise "Please supply database path" unless ARGV[0]
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift './lib'
|
6
|
+
$LOAD_PATH.unshift './spec'
|
7
|
+
$LOAD_PATH.unshift './tasks'
|
8
|
+
ENV['RACK_ENV'] = 'development'
|
9
|
+
require 'sequel'
|
10
|
+
require 'logger'
|
11
|
+
#DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}.tap { |it| puts it }
|
12
|
+
DATABASE_CREDENTIALS = {adapter: "postgres", database: "postgres", username: 'postgres', password: 'postgres', host: "localhost", :encoding => 'utf8'}
|
13
|
+
|
14
|
+
connection = Sequel.connect(DATABASE_CREDENTIALS)
|
15
|
+
connection.timezone = :utc
|
16
|
+
# Uncomment these lines to open a pry session for inspecting the database
|
17
|
+
|
18
|
+
|
19
|
+
require 'pact_broker/db'
|
20
|
+
require 'pact_broker'
|
21
|
+
require 'support/test_data_builder'
|
22
|
+
puts "bout to pry"
|
23
|
+
|
24
|
+
require 'pry'; pry(binding);
|
25
|
+
puts "fater pry"
|
data/script/seed.rb
CHANGED
@@ -8,6 +8,7 @@ $LOAD_PATH.unshift './tasks'
|
|
8
8
|
ENV['RACK_ENV'] = 'development'
|
9
9
|
require 'sequel'
|
10
10
|
require 'logger'
|
11
|
+
require 'stringio'
|
11
12
|
logger = Logger.new($stdout)
|
12
13
|
logger = Logger.new(StringIO.new)
|
13
14
|
DATABASE_CREDENTIALS = {logger: logger, adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}.tap { |it| puts it }
|
@@ -15,8 +15,8 @@ describe "Deleting tagged pact versions" do
|
|
15
15
|
expect{ subject }.to change{ PactBroker::Pacts::PactPublication.count }.by(-1)
|
16
16
|
end
|
17
17
|
|
18
|
-
it "returns a
|
19
|
-
expect(subject.status).to be
|
18
|
+
it "returns a 200" do
|
19
|
+
expect(subject.status).to be 200
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
describe "retrieving a pact" do
|
2
|
-
|
3
|
-
subject { get path; last_response }
|
2
|
+
subject { get(path) }
|
4
3
|
|
5
4
|
context "when differing case is used in the consumer and provider names" do
|
6
5
|
|
@@ -30,6 +29,7 @@ describe "retrieving a pact" do
|
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
32
|
+
|
33
33
|
context "when differing case is used in the tag name" do
|
34
34
|
|
35
35
|
let(:path) { "/pacts/provider/a%20provider/consumer/a%20consumer/latest/PROD" }
|
@@ -1,8 +1,7 @@
|
|
1
|
-
describe "retrieving a pact" do
|
2
|
-
subject { get
|
1
|
+
RSpec.describe "retrieving a pact" do
|
2
|
+
subject { get(path) }
|
3
3
|
|
4
4
|
context "when differing case is used in the consumer and provider names" do
|
5
|
-
let(:td) { TestDataBuilder.new }
|
6
5
|
let(:pact) { td.create_pact_with_hierarchy("Foo", "1", "Bar").and_return(:pact) }
|
7
6
|
let!(:path) { "/pacts/provider/Bar/consumer/Foo/pact-version/#{pact.pact_version_sha}" }
|
8
7
|
|
@@ -10,4 +9,28 @@ describe "retrieving a pact" do
|
|
10
9
|
expect(subject.status).to be 200
|
11
10
|
end
|
12
11
|
end
|
12
|
+
|
13
|
+
context "when there are multiple consumer versions for the same sha" do
|
14
|
+
before do
|
15
|
+
td.create_pact_with_hierarchy("Foo", "1", "Bar")
|
16
|
+
.create_consumer_version("2")
|
17
|
+
.republish_same_pact
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:pact) { PactBroker::Pacts::PactPublication.order(:id).first.to_domain }
|
21
|
+
let(:path) { PactBroker::Api::PactBrokerUrls.pact_version_url(pact) }
|
22
|
+
|
23
|
+
it "returns the latest" do
|
24
|
+
expect(JSON.parse(subject.body)['_links']['pb:consumer-version']['name']).to eq "2"
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when there is metadata specifying the consumer version number" do
|
28
|
+
let(:pact) { PactBroker::Pacts::PactPublication.order(:id).first.to_domain }
|
29
|
+
let(:path) { PactBroker::Api::PactBrokerUrls.pact_version_url_with_webhook_metadata(pact) }
|
30
|
+
|
31
|
+
it "returns the pact with the matching consumer version number" do
|
32
|
+
expect(JSON.parse(subject.body)['_links']['pb:consumer-version']['name']).to eq "1"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
13
36
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
{
|
2
|
+
"counts": {
|
3
|
+
"totalVersions": 9,
|
4
|
+
"versionsToDelete": 3,
|
5
|
+
"versionsNotToKeep": 6,
|
6
|
+
"versionsToKeep": 3,
|
7
|
+
"versionsToKeepBySelector": [
|
8
|
+
{
|
9
|
+
"selector": {
|
10
|
+
"tag": "prod"
|
11
|
+
},
|
12
|
+
"count": 2
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"selector": {
|
16
|
+
"tag": "dev",
|
17
|
+
"latest": true
|
18
|
+
},
|
19
|
+
"count": 1
|
20
|
+
}
|
21
|
+
]
|
22
|
+
},
|
23
|
+
"versionSummary": {
|
24
|
+
"Bar": {
|
25
|
+
"toDelete": {
|
26
|
+
"count": 0
|
27
|
+
},
|
28
|
+
"toKeep": {
|
29
|
+
"count": 0
|
30
|
+
}
|
31
|
+
},
|
32
|
+
"Foo": {
|
33
|
+
"toDelete": {
|
34
|
+
"count": 3,
|
35
|
+
"fromVersion": {
|
36
|
+
"number": "2",
|
37
|
+
"created": "1 day ago",
|
38
|
+
"tags": [
|
39
|
+
|
40
|
+
]
|
41
|
+
},
|
42
|
+
"toVersion": {
|
43
|
+
"number": "6",
|
44
|
+
"created": "5 days ago",
|
45
|
+
"tags": [
|
46
|
+
"foo"
|
47
|
+
]
|
48
|
+
}
|
49
|
+
},
|
50
|
+
"toKeep": {
|
51
|
+
"count": 4,
|
52
|
+
"latestVersion": {
|
53
|
+
"number": "1",
|
54
|
+
"created": "less than a minute ago",
|
55
|
+
"tags": [
|
56
|
+
"dev",
|
57
|
+
"prod"
|
58
|
+
]
|
59
|
+
},
|
60
|
+
"firstVersion": {
|
61
|
+
"number": "7",
|
62
|
+
"created": "6 days ago",
|
63
|
+
"tags": [
|
64
|
+
|
65
|
+
]
|
66
|
+
}
|
67
|
+
}
|
68
|
+
},
|
69
|
+
"Meep": {
|
70
|
+
"toDelete": {
|
71
|
+
"count": 0
|
72
|
+
},
|
73
|
+
"toKeep": {
|
74
|
+
"count": 2,
|
75
|
+
"latestVersion": {
|
76
|
+
"number": "2",
|
77
|
+
"created": "6 days ago",
|
78
|
+
"tags": [
|
79
|
+
"foop"
|
80
|
+
]
|
81
|
+
},
|
82
|
+
"firstVersion": {
|
83
|
+
"number": "3",
|
84
|
+
"created": "6 days ago",
|
85
|
+
"tags": [
|
86
|
+
"blah"
|
87
|
+
]
|
88
|
+
}
|
89
|
+
}
|
90
|
+
},
|
91
|
+
"Moop": {
|
92
|
+
"toDelete": {
|
93
|
+
"count": 0
|
94
|
+
},
|
95
|
+
"toKeep": {
|
96
|
+
"count": 0
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
@@ -123,6 +123,12 @@ module PactBroker
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
+
context "when the metadata is empty" do
|
127
|
+
it "returns an empty hash" do
|
128
|
+
expect(PactBrokerUrls.decode_pact_metadata("")).to eq({})
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
126
132
|
context "when the metadata is not valid base64" do
|
127
133
|
it "returns an empty hash" do
|
128
134
|
expect(PactBrokerUrls.decode_pact_metadata("foo==,")).to eq({})
|
@@ -13,7 +13,6 @@ module PactBroker::Api
|
|
13
13
|
let(:json) { {some: 'json'}.to_json }
|
14
14
|
|
15
15
|
describe "GET" do
|
16
|
-
|
17
16
|
context "Accept: text/html" do
|
18
17
|
|
19
18
|
let(:json_content) { 'json_content' }
|
@@ -130,20 +129,20 @@ module PactBroker::Api
|
|
130
129
|
end
|
131
130
|
|
132
131
|
describe "DELETE" do
|
133
|
-
|
134
|
-
subject { delete "/pacts/provider/Provider/consumer/Consumer/version/1.2", json, {'CONTENT_TYPE' => "application/json"} ; last_response }
|
135
|
-
|
136
|
-
let(:pact) { double('pact') }
|
137
|
-
let(:pact_service) { PactBroker::Pacts::Service }
|
138
|
-
let(:response) { subject; last_response }
|
139
|
-
|
140
132
|
before do
|
141
133
|
allow(pact_service).to receive(:find_pact).and_return(pact)
|
142
134
|
allow(pact_service).to receive(:delete)
|
135
|
+
allow(pact_service).to receive(:find_latest_pact).and_return(latest_pact)
|
136
|
+
allow_any_instance_of(described_class).to receive(:latest_pact_url).and_return("http://latest-pact")
|
143
137
|
end
|
144
138
|
|
145
|
-
|
139
|
+
let(:pact) { double('pact') }
|
140
|
+
let(:pact_service) { PactBroker::Pacts::Service }
|
141
|
+
let(:latest_pact) { double('latest pact') }
|
142
|
+
|
143
|
+
subject { delete "/pacts/provider/Provider/consumer/Consumer/version/1.2", json, {'CONTENT_TYPE' => "application/json"} ; last_response }
|
146
144
|
|
145
|
+
context "when the pact exists" do
|
147
146
|
it "deletes the pact using the pact service" do
|
148
147
|
expect(pact_service).to receive(:delete).with(instance_of(PactBroker::Pacts::PactParams))
|
149
148
|
subject
|
@@ -152,6 +151,18 @@ module PactBroker::Api
|
|
152
151
|
it "returns a 200" do
|
153
152
|
expect(subject.status).to eq 200
|
154
153
|
end
|
154
|
+
|
155
|
+
it "returns a link to the latest pact" do
|
156
|
+
expect(JSON.parse(subject.body)["_links"]["pb:latest-pact-version"]["href"]).to eq "http://latest-pact"
|
157
|
+
end
|
158
|
+
|
159
|
+
context "with there are no more pacts" do
|
160
|
+
let(:latest_pact) { nil }
|
161
|
+
|
162
|
+
it "does not return a link" do
|
163
|
+
expect(JSON.parse(subject.body)["_links"]).to_not have_key("pb:latest-pact-version")
|
164
|
+
end
|
165
|
+
end
|
155
166
|
end
|
156
167
|
|
157
168
|
context "when the pact does not exist" do
|
@@ -69,8 +69,12 @@ module PactBroker
|
|
69
69
|
context "DELETE" do
|
70
70
|
before do
|
71
71
|
allow(pact_service).to receive(:delete_all_pact_publications_between)
|
72
|
+
allow(pact_service).to receive(:find_latest_pact).and_return(latest_pact)
|
73
|
+
allow_any_instance_of(described_class).to receive(:latest_pact_url).and_return("http://latest-pact")
|
72
74
|
end
|
73
75
|
|
76
|
+
let(:latest_pact) { double('pact') }
|
77
|
+
|
74
78
|
subject { delete(path) }
|
75
79
|
|
76
80
|
it "deletes all the pacts with the given consumer/provider/tag" do
|
@@ -78,8 +82,12 @@ module PactBroker
|
|
78
82
|
subject
|
79
83
|
end
|
80
84
|
|
81
|
-
it "returns a
|
82
|
-
expect(subject.status).to eq
|
85
|
+
it "returns a 200" do
|
86
|
+
expect(subject.status).to eq 200
|
87
|
+
end
|
88
|
+
|
89
|
+
it "returns a link to the latest pact" do
|
90
|
+
expect(JSON.parse(subject.body)["_links"]["pb:latest-pact-version"]["href"]).to eq "http://latest-pact"
|
83
91
|
end
|
84
92
|
end
|
85
93
|
end
|
@@ -17,7 +17,7 @@ module PactBroker
|
|
17
17
|
let(:database_connector) { double('database_connector' )}
|
18
18
|
let(:verification) { double(PactBroker::Domain::Verification) }
|
19
19
|
let(:errors_empty) { true }
|
20
|
-
let(:parsed_metadata) { { the: 'metadata' } }
|
20
|
+
let(:parsed_metadata) { { the: 'metadata', consumer_version_number: "2"} }
|
21
21
|
let(:base_url) { "http://example.org" }
|
22
22
|
let(:webhook_execution_configuration) { instance_double(PactBroker::Webhooks::ExecutionConfiguration) }
|
23
23
|
|
@@ -29,10 +29,14 @@ module PactBroker
|
|
29
29
|
allow(webhook_execution_configuration).to receive(:with_webhook_context).and_return(webhook_execution_configuration)
|
30
30
|
end
|
31
31
|
|
32
|
-
subject { post
|
32
|
+
subject { post(url, request_body, rack_env) }
|
33
33
|
|
34
34
|
it "looks up the specified pact" do
|
35
|
-
|
35
|
+
expect(Pacts::Service).to receive(:find_pact) do | arg |
|
36
|
+
expect(arg).to be_a(PactBroker::Pacts::PactParams)
|
37
|
+
expect(arg[:consumer_version_number]).to eq "2"
|
38
|
+
end
|
39
|
+
subject
|
36
40
|
end
|
37
41
|
|
38
42
|
context "when the pact does not exist" do
|
@@ -6,7 +6,7 @@ IS_MYSQL = !!DB.mysql?
|
|
6
6
|
module PactBroker
|
7
7
|
module DB
|
8
8
|
# Inner queries don't work on MySQL. Seriously, MySQL???
|
9
|
-
describe CleanIncremental,
|
9
|
+
describe CleanIncremental, skip: IS_MYSQL do
|
10
10
|
|
11
11
|
def pact_publication_count_for(consumer_name, version_number)
|
12
12
|
PactBroker::Pacts::PactPublication.where(consumer_version: PactBroker::Domain::Version.where_pacticipant_name(consumer_name).where(number: version_number)).count
|
@@ -74,12 +74,20 @@ module PactBroker
|
|
74
74
|
context "when dry_run: true" do
|
75
75
|
before do
|
76
76
|
td.create_pact_with_hierarchy("Meep", "2", "Moop")
|
77
|
+
.create_consumer_version_tag("foop")
|
78
|
+
.create_consumer_version("3")
|
79
|
+
.create_consumer_version_tag("blah")
|
77
80
|
end
|
81
|
+
|
78
82
|
let(:dry_run) { true }
|
79
83
|
|
80
84
|
it "doesn't delete anything" do
|
81
85
|
expect { subject }.to_not change { PactBroker::Domain::Version.count }
|
82
86
|
end
|
87
|
+
|
88
|
+
it "returns info on what will be deleted" do
|
89
|
+
Approvals.verify(subject, :name => 'clean_incremental_dry_run', format: :json)
|
90
|
+
end
|
83
91
|
end
|
84
92
|
end
|
85
93
|
|
@@ -2,11 +2,14 @@ require 'pact_broker/db/delete_overwritten_data'
|
|
2
2
|
|
3
3
|
module PactBroker
|
4
4
|
module DB
|
5
|
-
describe DeleteOverwrittenData,
|
5
|
+
describe DeleteOverwrittenData, skip: !!DB.mysql? do
|
6
6
|
describe ".call" do
|
7
7
|
let(:db) { PactBroker::DB.connection }
|
8
|
-
|
9
|
-
let(:
|
8
|
+
let(:max_age) { nil }
|
9
|
+
let(:dry_run) { nil }
|
10
|
+
let(:limit) { nil }
|
11
|
+
|
12
|
+
subject { DeleteOverwrittenData.call(db, max_age: max_age, limit: limit, dry_run: dry_run) }
|
10
13
|
|
11
14
|
context "when a pact is overwritten" do
|
12
15
|
let!(:pact_to_delete) { td.create_everything_for_an_integration.and_return(:pact) }
|
@@ -25,6 +28,14 @@ module PactBroker
|
|
25
28
|
expect(subject[:deleted][:pact_publications]).to eq 1
|
26
29
|
expect(subject[:kept][:pact_publications]).to eq 1
|
27
30
|
end
|
31
|
+
|
32
|
+
context "when dry_run is true" do
|
33
|
+
let(:dry_run) { true }
|
34
|
+
|
35
|
+
it "does not delete anything" do
|
36
|
+
expect { subject }.to_not change{ db[:pact_publications].count }
|
37
|
+
end
|
38
|
+
end
|
28
39
|
end
|
29
40
|
|
30
41
|
context "when a pact has multiple verifications" do
|
@@ -53,10 +64,12 @@ module PactBroker
|
|
53
64
|
context "when a pact version is orphaned" do
|
54
65
|
before do
|
55
66
|
td.create_pact_with_verification.comment("this one will still have the verification, so can't be deleted")
|
56
|
-
.
|
57
|
-
.
|
67
|
+
.create_pact_version_without_publication.comment("will be deleted")
|
68
|
+
.create_pact_version_without_publication.comment("will be kept because of limit")
|
58
69
|
end
|
59
70
|
|
71
|
+
let(:limit) { 1 }
|
72
|
+
|
60
73
|
it "is deleted" do
|
61
74
|
expect { subject }.to change{ db[:pact_versions].count }.by(-1)
|
62
75
|
end
|
@@ -65,36 +78,83 @@ module PactBroker
|
|
65
78
|
expect(subject[:deleted][:pact_versions]).to eq 1
|
66
79
|
expect(subject[:kept][:pact_versions]).to eq 2
|
67
80
|
end
|
81
|
+
|
82
|
+
context "when dry_run is true" do
|
83
|
+
let(:dry_run) { true }
|
84
|
+
|
85
|
+
it "does not delete anything" do
|
86
|
+
expect { subject }.to_not change{ db[:pact_versions].count }
|
87
|
+
end
|
88
|
+
end
|
68
89
|
end
|
69
90
|
|
70
|
-
context "when the pact publication is
|
91
|
+
context "when the pact publication is younger than the max age" do
|
71
92
|
before do
|
72
|
-
td.set_now(
|
93
|
+
td.set_now(DateTime.now - 3)
|
73
94
|
.create_pact_with_hierarchy
|
74
95
|
.revise_pact
|
75
96
|
end
|
76
97
|
|
77
|
-
let(:
|
98
|
+
let(:max_age) { 4 }
|
78
99
|
|
79
100
|
it "doesn't delete the data" do
|
80
101
|
expect { subject }.to_not change { db[:pact_publications].count }
|
81
102
|
end
|
82
103
|
end
|
83
104
|
|
84
|
-
context "when the verification is
|
105
|
+
context "when the verification is younger than the max age" do
|
85
106
|
before do
|
86
|
-
td.set_now(
|
107
|
+
td.set_now(DateTime.now - 3)
|
87
108
|
.create_pact_with_hierarchy
|
88
109
|
.create_verification(provider_version: "1", success: false)
|
89
110
|
.create_verification(provider_version: "1", success: true, number: 2)
|
90
111
|
end
|
91
112
|
|
92
|
-
let(:
|
113
|
+
let(:max_age) { 4 }
|
93
114
|
|
94
115
|
it "doesn't delete the data" do
|
95
116
|
expect { subject }.to_not change { db[:verifications].count }
|
96
117
|
end
|
97
118
|
end
|
119
|
+
|
120
|
+
context "when there are triggered webhooks and executions" do
|
121
|
+
before do
|
122
|
+
td.create_pact_with_hierarchy("Foo", "1", "Bar")
|
123
|
+
.create_webhook
|
124
|
+
.create_triggered_webhook
|
125
|
+
.create_webhook_execution
|
126
|
+
.create_triggered_webhook.comment("latest")
|
127
|
+
.create_webhook_execution
|
128
|
+
.create_pact_with_hierarchy("Foo1", "1", "Bar1")
|
129
|
+
.create_webhook
|
130
|
+
.create_triggered_webhook
|
131
|
+
.create_webhook_execution
|
132
|
+
.create_triggered_webhook.comment("latest")
|
133
|
+
.create_webhook_execution
|
134
|
+
end
|
135
|
+
|
136
|
+
let(:limit) { 3 }
|
137
|
+
|
138
|
+
it "deletes all but the latest triggered webhooks, considering the limit" do
|
139
|
+
expect { subject }.to change { PactBroker::Webhooks::TriggeredWebhook.count }.by(-2)
|
140
|
+
end
|
141
|
+
|
142
|
+
context "when dry_run is true" do
|
143
|
+
let(:dry_run) { true }
|
144
|
+
|
145
|
+
it "does not delete anything" do
|
146
|
+
expect { subject }.to_not change{ PactBroker::Webhooks::TriggeredWebhook.count }
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context "when all the records are younger than the max age" do
|
151
|
+
let(:max_age) { 1 }
|
152
|
+
|
153
|
+
it "doesn't delete anything" do
|
154
|
+
expect { subject }.to_not change { PactBroker::Webhooks::TriggeredWebhook.count }
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
98
158
|
end
|
99
159
|
end
|
100
160
|
end
|