Don't use MilestoneFinder for group milestones
This refactors the DashboardGroupMilestone model so that it no longer uses the MilestoneFinder, instead using methods defined on the Milestone model directly.
This commit is contained in:
parent
a2a00a5e6d
commit
ec14d3fe34
3 changed files with 27 additions and 2 deletions
|
@ -13,7 +13,11 @@ class DashboardGroupMilestone < GlobalMilestone
|
|||
end
|
||||
|
||||
def self.build_collection(groups)
|
||||
MilestonesFinder.new(group_ids: groups.select(:id)).execute.map { |m| new(m) } # rubocop: disable CodeReuse/Finder
|
||||
Milestone.of_groups(groups.select(:id))
|
||||
.reorder_by_due_date_asc
|
||||
.order_by_name_asc
|
||||
.active
|
||||
.map { |m| new(m) }
|
||||
end
|
||||
|
||||
override :group_milestone?
|
||||
|
|
|
@ -46,6 +46,9 @@ class Milestone < ActiveRecord::Base
|
|||
where(conditions.reduce(:or))
|
||||
end
|
||||
|
||||
scope :order_by_name_asc, -> { order(Arel::Nodes::Ascending.new(arel_table[:title].lower)) }
|
||||
scope :reorder_by_due_date_asc, -> { reorder(Gitlab::Database.nulls_last_order('due_date', 'ASC')) }
|
||||
|
||||
validates :group, presence: true, unless: :project
|
||||
validates :project, presence: true, unless: :group
|
||||
|
||||
|
@ -149,7 +152,7 @@ class Milestone < ActiveRecord::Base
|
|||
sorted =
|
||||
case method.to_s
|
||||
when 'due_date_asc'
|
||||
reorder(Gitlab::Database.nulls_last_order('due_date', 'ASC'))
|
||||
reorder_by_due_date_asc
|
||||
when 'due_date_desc'
|
||||
reorder(Gitlab::Database.nulls_last_order('due_date', 'DESC'))
|
||||
when 'name_asc'
|
||||
|
|
|
@ -95,6 +95,24 @@ describe Milestone do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.order_by_name_asc' do
|
||||
it 'sorts by name ascending' do
|
||||
milestone1 = create(:milestone, title: 'Foo')
|
||||
milestone2 = create(:milestone, title: 'Bar')
|
||||
|
||||
expect(described_class.order_by_name_asc).to eq([milestone2, milestone1])
|
||||
end
|
||||
end
|
||||
|
||||
describe '.reorder_by_due_date_asc' do
|
||||
it 'reorders the input relation' do
|
||||
milestone1 = create(:milestone, due_date: Date.new(2018, 9, 30))
|
||||
milestone2 = create(:milestone, due_date: Date.new(2018, 10, 20))
|
||||
|
||||
expect(described_class.reorder_by_due_date_asc).to eq([milestone1, milestone2])
|
||||
end
|
||||
end
|
||||
|
||||
describe "#percent_complete" do
|
||||
it "does not count open issues" do
|
||||
milestone.issues << issue
|
||||
|
|
Loading…
Reference in a new issue