diff --git a/ee/app/models/ee/epic.rb b/ee/app/models/ee/epic.rb index d330354be164c24a22fb79099ab05ac4dcef5b90..2df3ce5c1b6d00bcb82f717984ead890c2037c65 100644 --- a/ee/app/models/ee/epic.rb +++ b/ee/app/models/ee/epic.rb @@ -155,12 +155,12 @@ module EE # Earliest start date from issues' milestones def start_date_from_milestones - start_date_is_fixed? ? epic_issues.joins(issue: :milestone).minimum('milestones.start_date') : start_date + start_date_is_fixed? ? start_date_sourcing_milestone.start_date : start_date end # Latest end date from issues' milestones def due_date_from_milestones - due_date_is_fixed? ? epic_issues.joins(issue: :milestone).maximum('milestones.due_date') : due_date + due_date_is_fixed? ? due_date_sourcing_milestone.due_date : due_date end def to_reference(from = nil, full: false) diff --git a/ee/spec/models/epic_spec.rb b/ee/spec/models/epic_spec.rb index d152c3373e4ca80033dd8d21cfa0b57f58b82567..7b838205a7d7435298c7163d22a4cafa505ebe26 100644 --- a/ee/spec/models/epic_spec.rb +++ b/ee/spec/models/epic_spec.rb @@ -99,76 +99,40 @@ describe Epic do describe '#start_date_from_milestones' do context 'fixed date' do - subject { create(:epic, :use_fixed_dates) } - let(:date) { Date.new(2017, 3, 4) } + it 'returns start date from start date sourcing milestone' do + subject = create(:epic, :use_fixed_dates) + milestone = create(:milestone, :with_dates) + subject.start_date_sourcing_milestone = milestone - 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) + expect(subject.start_date_from_milestones).to eq(milestone.start_date) end end context 'milestone date' do - subject { create(:epic, start_date: date) } - let(:date) { Date.new(2017, 3, 4) } - it 'returns start_date' do - expect(subject.start_date_from_milestones).to eq(date) + subject = create(:epic, start_date: Date.new(2017, 3, 4)) + + expect(subject.start_date_from_milestones).to eq(subject.start_date) end end end describe '#due_date_from_milestones' do context 'fixed date' do - subject { create(:epic, :use_fixed_dates) } - let(:date) { Date.new(2017, 3, 4) } + it 'returns due date from due date sourcing milestone' do + subject = create(:epic, :use_fixed_dates) + milestone = create(:milestone, :with_dates) + subject.due_date_sourcing_milestone = milestone - 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) + expect(subject.due_date_from_milestones).to eq(milestone.due_date) end end context 'milestone date' do - subject { create(:epic, due_date: date) } - let(:date) { Date.new(2017, 3, 4) } - it 'returns due_date' do - expect(subject.due_date_from_milestones).to eq(date) + subject = create(:epic, due_date: Date.new(2017, 3, 4)) + + expect(subject.due_date_from_milestones).to eq(subject.due_date) end end end