22 lines
711 B
Ruby
22 lines
711 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# Assert that this collection is sorted by argument and order
|
||
|
#
|
||
|
# By default, this checks that the collection is sorted ascending
|
||
|
# but you can check order by specific field and order by passing
|
||
|
# them, eg:
|
||
|
#
|
||
|
# ```
|
||
|
# expect(collection).to be_sorted(:field, :desc)
|
||
|
# ```
|
||
|
RSpec::Matchers.define :be_sorted do |by, order = :asc|
|
||
|
match do |actual|
|
||
|
next true unless actual.present? # emtpy collection is sorted
|
||
|
|
||
|
actual
|
||
|
.then { |collection| by ? collection.sort_by(&by) : collection.sort }
|
||
|
.then { |sorted_collection| order.to_sym == :desc ? sorted_collection.reverse : sorted_collection }
|
||
|
.then { |sorted_collection| sorted_collection == actual }
|
||
|
end
|
||
|
end
|