Skip to content

Commit 301d9a5

Browse files
committed
fix: inefficient SQL loading latest verification for pact version
Closes: pact-foundation#291
1 parent 47c602e commit 301d9a5

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

lib/pact_broker/pacts/pact_version.rb

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
require 'sequel'
22
require 'pact_broker/repositories/helpers'
3+
require 'pact_broker/verifications/latest_verification_for_pact_version'
34

45
module PactBroker
56
module Pacts
67
class PactVersion < Sequel::Model(:pact_versions)
78
plugin :timestamps
89
one_to_many :pact_publications, reciprocal: :pact_version
910
one_to_many :verifications, reciprocal: :verification, order: :id, :class => "PactBroker::Domain::Verification"
11+
one_to_one :latest_verification, class: "PactBroker::Verifications::LatestVerificationForPactVersion", key: :pact_version_id, primary_key: :id
1012
associate(:many_to_one, :provider, class: "PactBroker::Domain::Pacticipant", key: :provider_id, primary_key: :id)
1113
associate(:many_to_one, :consumer, class: "PactBroker::Domain::Pacticipant", key: :consumer_id, primary_key: :id)
1214

@@ -40,10 +42,6 @@ def latest_pact_publication
4042
.last
4143
end
4244

43-
def latest_verification
44-
verifications.last
45-
end
46-
4745
def consumer_versions
4846
PactBroker::Domain::Version.where(id: PactBroker::Pacts::PactPublication.select(:consumer_version_id).where(pact_version_id: id)).order(:order)
4947
end

spec/lib/pact_broker/pacts/pact_version_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,22 @@ module Pacts
9292
expect(PactVersion.first.latest_consumer_version_number).to eq "1.0.1"
9393
end
9494
end
95+
96+
describe "#latest_verification" do
97+
before do
98+
td.create_pact_with_hierarchy
99+
.create_verification
100+
.create_verification(number: 2)
101+
.create_verification(number: 3)
102+
end
103+
let(:pact_version) { PactVersion.last }
104+
105+
subject { pact_version.latest_verification }
106+
107+
it "returns the latest verification by execution date" do
108+
expect(subject.number).to eq 3
109+
end
110+
end
95111
end
96112
end
97113
end

0 commit comments

Comments
 (0)