Skip to content

Commit 8fb28ee

Browse files
committed
fix: correct logic for finding latest verification for revised pacts
1 parent 0704772 commit 8fb28ee

File tree

3 files changed

+48
-22
lines changed

3 files changed

+48
-22
lines changed

lib/pact_broker/domain/verification.rb

+1-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ def verification_number number
4646

4747
def tag tag_name
4848
filter = name_like(Sequel.qualify(:tags, :name), tag_name)
49-
join(:pact_publications, {pact_version_id: :pact_version_id})
50-
.join(:tags, {version_id: :consumer_version_id}).where(filter)
49+
join(:tags, { version_id: :consumer_version_id }).where(filter)
5150
end
5251

5352
def untagged

lib/pact_broker/verifications/repository.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,15 @@ def find_latest_verification_for_tags consumer_name, provider_name, consumer_ver
7575
query = PactBroker::Verifications::AllVerifications
7676
.select_all_qualified
7777
.join(:versions, {Sequel[:provider_versions][:id] => Sequel[view_name][:provider_version_id]}, {table_alias: :provider_versions})
78-
.join(:all_pact_publications, { Sequel[view_name][:pact_version_id] => Sequel[:all_pact_publications][:pact_version_id] })
78+
.join(:latest_pact_publications_by_consumer_versions, { Sequel[view_name][:pact_version_id] => Sequel[:latest_pact_publications_by_consumer_versions][:pact_version_id] })
7979
.consumer(consumer_name)
8080
.provider(provider_name)
8181
.tag(consumer_version_tag)
8282
.provider_version_tag(provider_version_tag)
8383

8484
query.reverse_order(
85-
Sequel[:all_pact_publications][:consumer_version_order],
86-
Sequel[:all_pact_publications][:revision_number],
85+
Sequel[:latest_pact_publications_by_consumer_versions][:consumer_version_order],
86+
Sequel[:latest_pact_publications_by_consumer_versions][:revision_number],
8787
Sequel[:provider_versions][:order],
8888
Sequel[view_name][:execution_date]
8989
).limit(1).single_record

spec/lib/pact_broker/verifications/repository_spec.rb

+44-17
Original file line numberDiff line numberDiff line change
@@ -189,26 +189,53 @@ module Verifications
189189
end
190190

191191
describe "find_latest_verification_for_tags" do
192-
before do
193-
TestDataBuilder.new
194-
.create_pact_with_hierarchy("Foo", "1", "Bar")
195-
.create_consumer_version_tag("feat-x")
196-
.create_verification(provider_version: "5")
197-
.use_provider_version("5")
198-
.create_provider_version_tag("feat-y")
199-
.create_verification(provider_version: "6", number: 2)
200-
.use_provider_version("6")
201-
.create_provider_version_tag("feat-y")
202-
.create_verification(provider_version: "7", number: 3)
203-
.create_consumer_version("2")
204-
.create_pact
205-
.create_verification(provider_version: "8")
192+
context "with no revisions" do
193+
before do
194+
TestDataBuilder.new
195+
.create_pact_with_hierarchy("Foo", "1", "Bar")
196+
.create_consumer_version_tag("feat-x")
197+
.create_verification(provider_version: "5")
198+
.use_provider_version("5")
199+
.create_provider_version_tag("feat-y")
200+
.create_verification(provider_version: "6", number: 2)
201+
.use_provider_version("6")
202+
.create_provider_version_tag("feat-y")
203+
.create_verification(provider_version: "7", number: 3)
204+
.create_consumer_version("2")
205+
.create_pact
206+
.create_verification(provider_version: "8")
207+
end
208+
209+
subject { Repository.new.find_latest_verification_for_tags("Foo", "Bar", "feat-x", "feat-y") }
210+
211+
it "returns the latest verification for a pact with the given consumer tag, by a provider version with the given provider tag" do
212+
expect(subject.provider_version_number).to eq "6"
213+
end
206214
end
207215

208-
subject { Repository.new.find_latest_verification_for_tags("Foo", "Bar", "feat-x", "feat-y") }
216+
context "when a verification exists for a pact revision that was then overwritten by a new revision of the pact" do
217+
let(:content_1) { { content: 1 }.to_json }
218+
let(:content_2) { { content: 2 }.to_json }
219+
220+
before do
221+
TestDataBuilder.new
222+
.create_pact_with_hierarchy("Foo", "1", "Bar", content_1)
223+
.create_consumer_version_tag("develop")
224+
.create_verification(provider_version: "5", number: 1, tag_name: "develop", comment: "not this because pact revised")
225+
.create_verification(provider_version: "6", number: 2, tag_name: "develop", comment: "not this because pact revised")
226+
.revise_pact(content_2)
227+
.create_verification(provider_version: "1", number: 1, tag_name: "develop", comment: "not this because later one exists")
228+
.create_verification(provider_version: "2", number: 2, tag_name: "develop", comment: "this one!")
229+
.create_consumer_version("2")
230+
.create_pact(json_content: content_1)
231+
end
232+
233+
subject { Repository.new.find_latest_verification_for_tags("Foo", "Bar", "develop", "develop") }
209234

210-
it "returns the latest verification for a pact with the given consumer tag, by a provider version with the given provider tag" do
211-
expect(subject.provider_version_number).to eq "6"
235+
it "returns the latest verification " do
236+
expect(subject.provider_version_number).to eq "2"
237+
expect(subject.number).to eq 2
238+
end
212239
end
213240
end
214241
end

0 commit comments

Comments
 (0)