Skip to content

Commit cfa2109

Browse files
committed
feat(matrix): return most recent rows first
1 parent a62ff80 commit cfa2109

File tree

6 files changed

+54
-18
lines changed

6 files changed

+54
-18
lines changed

lib/pact_broker/api/decorators/matrix_text_decorator.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module PactBroker
88
module Api
99
module Decorators
1010
class MatrixTextDecorator
11-
Line = Struct.new(:consumer, :consumer_version, :provider, :provider_version, :success)
11+
Line = Struct.new(:consumer, :c_version, :revision, :provider, :p_version, :number, :success)
1212

1313
def initialize(lines)
1414
@lines = lines
@@ -17,7 +17,7 @@ def initialize(lines)
1717
def to_text(options)
1818
json_decorator = PactBroker::Api::Decorators::MatrixDecorator.new(lines)
1919
data = lines.collect do | line |
20-
Line.new(line[:consumer_name], line[:consumer_version_number], line[:provider_name], line[:provider_version_number], line[:success])
20+
Line.new(line[:consumer_name], line[:consumer_version_number], line[:pact_revision_number], line[:provider_name], line[:provider_version_number], line[:verification_number], line[:success])
2121
end
2222
printer = TablePrint::Printer.new(data)
2323
printer.table_print + "\n\nDeployable: #{json_decorator.deployable.inspect}\nReason: #{json_decorator.reason}\n"

lib/pact_broker/matrix/repository.rb

+9-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ class Repository
88
include PactBroker::Repositories::Helpers
99
include PactBroker::Repositories
1010

11-
# TODO SORT BY MOST RECENT FIRST
1211
# TODO move latest verification logic in to database
1312

1413
GROUP_BY_PROVIDER_VERSION_NUMBER = [:consumer_name, :consumer_version_number, :provider_name, :provider_version_number]
@@ -43,7 +42,7 @@ def apply_scope options, selectors, lines
4342

4443
lines.group_by{|line| group_by_columns.collect{|key| line.send(key) }}
4544
.values
46-
.collect{ | lines | lines.first.provider_version_number.nil? ? lines : lines.last }
45+
.collect{ | lines | lines.first.provider_version_number.nil? ? lines : lines.first }
4746
.flatten
4847
end
4948

@@ -53,8 +52,7 @@ def find_for_consumer_and_provider pacticipant_1_name, pacticipant_2_name
5352
end
5453

5554
def find_compatible_pacticipant_versions selectors
56-
find(selectors, latestby: 'cvpv')
57-
.select{|line| line[:success] }
55+
find(selectors, latestby: 'cvpv').select{|line| line[:success] }
5856
end
5957

6058
##
@@ -70,11 +68,14 @@ def find_all selectors, options
7068
query = where_consumer_and_provider_in(selectors, query)
7169
end
7270

73-
# TODO need to order by most recent first, otherwise the limit will give us the oldest rows
74-
7571
query = query.limit(options[:limit]) if options[:limit]
76-
77-
query.order(:verification_executed_at, :verification_id).all
72+
query.order(
73+
Sequel.asc(:consumer_name),
74+
Sequel.desc(:consumer_version_order),
75+
Sequel.desc(:pact_revision_number),
76+
Sequel.asc(:provider_name),
77+
Sequel.desc(:provider_version_order),
78+
Sequel.desc(:verification_id)).all
7879
end
7980

8081
def base_table(options)

lib/pact_broker/matrix/row.rb

+25-6
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,32 @@ def summary
1515

1616
# Add logic for ignoring case
1717
def <=> other
18-
[:consumer_name, :consumer_version_order, :pact_revision_number, :provider_name, :provider_version_order, :verification_id].each do | column |
19-
if send(column) != other.send(column)
20-
return (send(column) <=> other.send(column)) * -1
21-
end
22-
end
2318

24-
return 0
19+
comparisons = [
20+
compare_name_asc(consumer_name, other.consumer_name),
21+
compare_number_desc(consumer_version_order, other.consumer_version_order),
22+
compare_number_desc(pact_revision_number, other.pact_revision_number),
23+
compare_name_asc(provider_name, other.provider_name),
24+
compare_number_desc(provider_version_order, other.provider_version_order),
25+
compare_number_desc(verification_id, other.verification_id)
26+
]
27+
28+
comparisons.find{|c| c != 0 } || 0
29+
30+
end
31+
32+
def compare_name_asc name1, name2
33+
name1 <=> name2
34+
end
35+
36+
def compare_number_desc number1, number2
37+
if number1 && number2
38+
number2 <=> number1
39+
elsif number1
40+
1
41+
else
42+
-1
43+
end
2544
end
2645
end
2746
end

lib/pact_broker/ui/controllers/matrix.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Matrix < Base
1111

1212
get "/provider/:provider_name/consumer/:consumer_name" do
1313
selectors = [{ pacticipant_name: params[:consumer_name] }, { pacticipant_name: params[:provider_name] } ]
14-
lines = matrix_service.find(selectors, {latestby: 'cvpv', limit: 500})
14+
lines = matrix_service.find(selectors, {latestby: 'cvpv', limit: 1000})
1515
lines = lines.collect{|line| PactBroker::UI::ViewDomain::MatrixLine.new(line) }.sort
1616
locals = {
1717
lines: lines,

spec/lib/pact_broker/matrix/repository_spec.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def shorten_rows rows
5656
let(:options) { {limit: 1} }
5757

5858
it "returns fewer rows than the limit (because some of the logic is done in the code, there may be fewer than the limit - need to fix this)" do
59-
expect(subject.size).to eq 1
59+
expect(subject).to eq ["A2 B? n?"]
6060
end
6161
end
6262

spec/lib/pact_broker/matrix/row_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,22 @@ module Matrix
2929
expect([row_1, row_2].sort).to eq [row_2, row_1]
3030
end
3131

32+
context "with a nil column" do
33+
let(:row_2) do
34+
Row.new(
35+
consumer_name: 'A',
36+
consumer_version_order: 1,
37+
pact_revision_number: 1,
38+
provider_name: 'B',
39+
provider_version_order: nil,
40+
verification_id: nil
41+
)
42+
end
43+
44+
it "sorts the rows first" do
45+
expect([row_1, row_2].sort).to eq [row_2, row_1]
46+
end
47+
end
3248
end
3349
end
3450
end

0 commit comments

Comments
 (0)