pact_broker 2.71.0 → 2.72.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/.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
|