Skip to content

Commit f0cc32b

Browse files
committed
feat(matrix): add pact publication and verification dates to response
1 parent 136d8fb commit f0cc32b

File tree

4 files changed

+35
-20
lines changed

4 files changed

+35
-20
lines changed

lib/pact_broker/api/decorators/matrix_decorator.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,16 @@ def provider_hash(line, provider, base_url)
7575
}
7676
}
7777

78-
if !line[:provider_version].nil?
79-
hash[:version] = { number: line[:provider_version] }
78+
if !line[:provider_version_number].nil?
79+
hash[:version] = { number: line[:provider_version_number] }
8080
end
8181

8282
hash
8383
end
8484

8585
def pact_hash(line, base_url)
8686
{
87+
createdAt: line[:pact_created_at].to_datetime.xmlschema,
8788
_links: {
8889
self: {
8990
href: pact_url_from_params(base_url, line)
@@ -96,6 +97,7 @@ def verification_hash(line, base_url)
9697
if !line[:success].nil?
9798
{
9899
success: line[:success],
100+
verifiedAt: line[:verification_executed_at].to_datetime.xmlschema,
99101
_links: {
100102
self: {
101103
href: verification_url(OpenStruct.new(line), base_url)

lib/pact_broker/matrix/repository.rb

+17-13
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ class Repository
77
include PactBroker::Repositories
88

99
def find pacticipant_1_name, pacticipant_2_name
10-
PactBroker::Pacts::LatestPactPublicationsByConsumerVersion
11-
.left_outer_join(:latest_verifications, pact_version_id: :pact_version_id)
12-
.pacticipants(pacticipant_1_name, pacticipant_2_name)
13-
.reverse(:consumer_version_order)
14-
.all
15-
.collect(&:values)
10+
version_ids = PactBroker::Domain::Version.select(Sequel[:versions][:id])
11+
.join(:pacticipants, id: :pacticipant_id)
12+
.where(Sequel[:pacticipants][:name] => [pacticipant_1_name, pacticipant_2_name])
13+
find_for_version_ids(version_ids)
1614
end
1715

1816
##
@@ -23,19 +21,25 @@ def find_compatible_pacticipant_versions criteria
2321
version_repository.find_by_pacticipant_name_and_number(key, value).id
2422
end
2523

26-
query = PactBroker::Pacts::LatestPactPublicationsByConsumerVersion
27-
.select_append(:consumer_version_number, :provider_name, :consumer_name, :provider_version_id, :provider_version_number, :success, :execution_date)
24+
find_for_version_ids(version_ids)
25+
.group_by{|line| [line[:consumer_version_number], line[:provider_version_number]]}
26+
.values
27+
.collect(&:last)
28+
.select{ |line | line[:success] }
29+
end
30+
31+
def find_for_version_ids version_ids
32+
PactBroker::Pacts::LatestPactPublicationsByConsumerVersion
33+
.select_append(:consumer_version_number, :provider_name, :consumer_name, :provider_version_id, :provider_version_number, :success)
34+
.select_append(Sequel[:latest_pact_publications_by_consumer_versions][:created_at].as(:pact_created_at))
2835
.select_append(Sequel[:all_verifications][:number])
2936
.select_append(Sequel[:all_verifications][:id].as(:verification_id))
37+
.select_append(Sequel[:all_verifications][:execution_date].as(:verification_executed_at))
3038
.left_outer_join(:all_verifications, pact_version_id: :pact_version_id)
31-
.where(provider_version_id: version_ids)
39+
.where(provider_version_id: version_ids).or(provider_version_id: nil)
3240
.where(consumer_version_id: version_ids)
3341
.order(:execution_date, :verification_id)
3442
.collect(&:values)
35-
.group_by{|line| [line[:consumer_version_number], line[:provider_version_number]]}
36-
.values
37-
.collect(&:last)
38-
.select{ |line | line[:success] }
3943
end
4044
end
4145
end

spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb

+10-4
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ module Api
55
module Decorators
66
describe MatrixPactDecorator do
77
describe "to_json" do
8+
let(:verification_date) { DateTime.new(2017, 12, 31) }
9+
let(:pact_created_at) { DateTime.new(2017, 1, 1) }
810
let(:line_1) do
911
{
1012
consumer_name: "Consumer",
1113
consumer_version_number: "1.0.0",
1214
pact_version_sha: "1234",
13-
provider_version: "4.5.6",
15+
pact_created_at: pact_created_at,
16+
provider_version_number: "4.5.6",
1417
provider_name: "Provider",
1518
success: true,
1619
number: 1,
1720
build_url: nil,
18-
execution_date: DateTime.now
21+
verification_executed_at: verification_date
1922
}
2023
end
2124

@@ -24,12 +27,13 @@ module Decorators
2427
consumer_name: "Consumer",
2528
consumer_version_number: "1.0.0",
2629
pact_version_sha: "1234",
27-
provider_version: nil,
30+
pact_created_at: pact_created_at,
31+
provider_version_number: nil,
2832
provider_name: "Provider",
2933
success: nil,
3034
number: nil,
3135
build_url: nil,
32-
execution_date: nil
36+
verification_executed_at: nil
3337
}
3438
end
3539

@@ -69,6 +73,7 @@ module Decorators
6973
let(:verification_hash) do
7074
{
7175
success: true,
76+
verifiedAt: "2017-12-31T00:00:00+00:00",
7277
_links: {
7378
self: {
7479
href: "http://example.org/pacts/provider/Provider/consumer/Consumer/pact-version/1234/verification-results/1"
@@ -79,6 +84,7 @@ module Decorators
7984

8085
let(:pact_hash) do
8186
{
87+
createdAt: "2017-01-01T00:00:00+00:00",
8288
_links: {
8389
self: {
8490
href: "http://example.org/pacts/provider/Provider/consumer/Consumer/version/1.0.0"

spec/lib/pact_broker/matrix/repository_spec.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module Matrix
1414
.create_pact
1515
end
1616

17-
subject { Repository.new.find "Consumer", "Provider" }
17+
subject { Repository.new.find("Consumer", "Provider") }
1818

1919
it "returns the latest revision of each pact in reverse consumer_version_order" do
2020
expect(subject.count).to eq 2
@@ -58,12 +58,15 @@ module Matrix
5858
expect(subject.first[:provider_name]).to eq "B"
5959
expect(subject.first[:provider_version_number]).to eq "2"
6060
expect(subject.first[:number]).to eq 2
61+
expect(subject.first[:pact_created_at]).to be_datey
62+
expect(subject.first[:verification_executed_at]).to be_datey
6163

6264
expect(subject.last[:consumer_name]).to eq "B"
6365
expect(subject.last[:consumer_version_number]).to eq "2"
6466
expect(subject.last[:provider_name]).to eq "C"
6567
expect(subject.last[:provider_version_number]).to eq "2"
6668
expect(subject.last[:number]).to eq 1
69+
expect(subject.last[:pact_created_at]).to be_datey
6770

6871
expect(subject.size).to eq 2
6972
end

0 commit comments

Comments
 (0)