Commit 23138484 authored by Mark Chao's avatar Mark Chao

Add methods to get start/due dates from epic issue's milestones

Earliest's start date and latests due date are returned.
parent 24b9a1cd
......@@ -109,6 +109,16 @@ module EE
# Needed to use EntityDateHelper#remaining_days_in_words
alias_attribute(:due_date, :end_date)
# Earliest start date from issues' milestones
def start_date_from_milestones
epic_issues.joins(issue: :milestone).minimum('milestones.start_date')
end
# Latest end date from issues' milestones
def due_date_from_milestones
epic_issues.joins(issue: :milestone).maximum('milestones.due_date')
end
def to_reference(from = nil, full: false)
reference = "#{self.class.reference_prefix}#{iid}"
......
......@@ -7,6 +7,7 @@ describe Epic do
it { is_expected.to belong_to(:author).class_name('User') }
it { is_expected.to belong_to(:assignee).class_name('User') }
it { is_expected.to belong_to(:group) }
it { is_expected.to have_many(:epic_issues) }
end
describe 'validations' do
......@@ -84,6 +85,60 @@ describe Epic do
end
end
describe '#start_date_from_milestones' do
subject { create(:epic) }
let(:date) { Date.new(2017, 3, 4) }
before do
milestone1 = create(
:milestone,
start_date: date,
due_date: date + 10.days
)
epic_issue1 = create(:epic_issue, epic: subject)
epic_issue1.issue.update(milestone: milestone1)
milestone2 = create(
:milestone,
start_date: date + 5.days,
due_date: date + 15.days
)
epic_issue2 = create(:epic_issue, epic: subject)
epic_issue2.issue.update(milestone: milestone2)
end
it 'returns earliest start date from issue milestones' do
expect(subject.start_date_from_milestones).to eq(date)
end
end
describe '#due_date_from_milestones' do
subject { create(:epic) }
let(:date) { Date.new(2017, 3, 4) }
before do
milestone1 = create(
:milestone,
start_date: date - 30.days,
due_date: date - 20.days
)
epic_issue1 = create(:epic_issue, epic: subject)
epic_issue1.issue.update(milestone: milestone1)
milestone2 = create(
:milestone,
start_date: date - 10.days,
due_date: date
)
epic_issue2 = create(:epic_issue, epic: subject)
epic_issue2.issue.update(milestone: milestone2)
end
it 'returns latest due date from issue milestones' do
expect(subject.due_date_from_milestones).to eq(date)
end
end
describe '#issues' do
let(:user) { create(:user) }
let(:group) { create(:group, :private) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment