diff --git a/app/models/concerns/milestoneish.rb b/app/models/concerns/milestoneish.rb index 710fc1ed647271ef9511595820c0eead4e02b831..7fe55f8402f5ad38f879daaad66da0aac2c132f2 100644 --- a/app/models/concerns/milestoneish.rb +++ b/app/models/concerns/milestoneish.rb @@ -86,6 +86,14 @@ module Milestoneish false end + def total_issue_time_spent + issues.joins(:timelogs).sum(:time_spent) + end + + def human_total_issue_time_spent + Gitlab::TimeTrackingFormatter.output(total_issue_time_spent) + end + private def count_issues_by_state(user) diff --git a/app/models/global_milestone.rb b/app/models/global_milestone.rb index 18af3c41d618ad34601a9c0e2582d784c7ab0886..c0864769314f8de9646c974fc09e10d4102d47f2 100644 --- a/app/models/global_milestone.rb +++ b/app/models/global_milestone.rb @@ -152,12 +152,4 @@ class GlobalMilestone @milestones.first.start_date end end - - def total_time_spent - issues.joins(:timelogs).sum(:time_spent) + merge_requests.joins(:timelogs).sum(:time_spent) - end - - def human_total_time_spent - Gitlab::TimeTrackingFormatter.output(total_time_spent) - end end diff --git a/app/models/milestone.rb b/app/models/milestone.rb index fa2dfcb694b7114d9d93e2bc61423e6c2d2632a1..47e6b785c39eea25c0a09754c48f492be406e786 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -213,14 +213,6 @@ class Milestone < ActiveRecord::Base project_id.present? end - def total_time_spent - issues.joins(:timelogs).sum(:time_spent) + merge_requests.joins(:timelogs).sum(:time_spent) - end - - def human_total_time_spent - Gitlab::TimeTrackingFormatter.output(total_time_spent) - end - private # Milestone titles must be unique across project milestones and group milestones diff --git a/app/views/shared/milestones/_sidebar.html.haml b/app/views/shared/milestones/_sidebar.html.haml index e244adf7d5282e170b780e784ff3291b61029403..d396e80e12c2f3e3d10eb9bc8102b207b38ead20 100644 --- a/app/views/shared/milestones/_sidebar.html.haml +++ b/app/views/shared/milestones/_sidebar.html.haml @@ -89,15 +89,15 @@ .sidebar-collapsed-icon = custom_icon('icon_hourglass') %span.collapsed-milestone-total-time-spent - - if milestone.human_total_time_spent - = milestone.human_total_time_spent + - if milestone.human_total_issue_time_spent + = milestone.human_total_issue_time_spent - else None .title.hide-collapsed - Total time spent + Total issue time spent .value.hide-collapsed - - if milestone.human_total_time_spent - %span.bold= milestone.human_total_time_spent + - if milestone.human_total_issue_time_spent + %span.bold= milestone.human_total_issue_time_spent - else %span.no-value No time spent diff --git a/spec/models/concerns/milestoneish_spec.rb b/spec/models/concerns/milestoneish_spec.rb index 66353935427df2087e8b2c45dd1b5e1a652fa877..c0a51e170fcf6f34987d562073f86b2ccf3b17cd 100644 --- a/spec/models/concerns/milestoneish_spec.rb +++ b/spec/models/concerns/milestoneish_spec.rb @@ -186,4 +186,15 @@ describe Milestone, 'Milestoneish' do expect(milestone.elapsed_days).to eq(2) end end + + describe '#total_issue_time_spent' do + it 'calculates total issue time spent' do + closed_issue_1.spend_time(duration: 300, user: author) + closed_issue_1.save! + closed_issue_2.spend_time(duration: 600, user: assignee) + closed_issue_2.save! + + expect(milestone.total_issue_time_spent).to eq(900) + end + end end diff --git a/spec/models/global_milestone_spec.rb b/spec/models/global_milestone_spec.rb index 4874dcbd58e9e7ea76cb5420d6a05e347622c544..ab58f5c5021a2693879c3b45e9e14fb0e6093159 100644 --- a/spec/models/global_milestone_spec.rb +++ b/spec/models/global_milestone_spec.rb @@ -190,37 +190,4 @@ describe GlobalMilestone do end end end - - describe '#total_time_spent' do - let(:milestone1_project1) { create(:milestone, title: "Milestone v1.2", project: project1) } - let(:milestone1_project2) { create(:milestone, title: "Milestone v1.2", project: project2) } - let(:issue1) { create(:issue, milestone: milestone1_project1) } - let(:issue2) { create(:issue, milestone: milestone1_project2) } - let(:merge_request1) { create(:merge_request, milestone: milestone1_project1) } - let(:merge_request2) { create(:merge_request, milestone: milestone1_project2) } - - before do - milestones = - [ - milestone1_project1, - milestone1_project2 - ] - milestones_relation = Milestone.where(id: milestones.map(&:id)) - - @global_milestone = described_class.new(milestone1_project1.title, milestones_relation) - end - - it 'calculates total time spent' do - issue1.spend_time(duration: 300, user: user) - issue1.save! - issue2.spend_time(duration: 600, user: user2) - issue2.save! - merge_request1.spend_time(duration: 200, user: user) - merge_request1.save! - merge_request2.spend_time(duration: 100, user: user2) - merge_request2.save! - - expect(@global_milestone.total_time_spent).to eq(1200) - end - end end diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 10c24317574747e27df0527110c7dc90ec4234d7..13e37fffa4e34d54fd3205113633866ead6383a5 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -284,27 +284,4 @@ describe Milestone do expect(milestone.participants).to eq [user] end end - - describe '#total_time_spent' do - let(:user) { build(:user) } - let(:project) { build(:project, name: 'sample-project') } - let(:milestone) { build(:milestone, iid: 1, project: project) } - let(:issue1) { build(:issue, milestone: milestone) } - let(:issue2) { build(:issue, milestone: milestone) } - let(:merge_request1) { build(:merge_request, milestone: milestone) } - let(:merge_request2) { build(:merge_request, milestone: milestone) } - - it 'calculates total time spent' do - issue1.spend_time(duration: 300, user: user) - issue1.save! - issue2.spend_time(duration: 600, user: user) - issue2.save! - merge_request1.spend_time(duration: 200, user: user) - merge_request1.save! - merge_request2.spend_time(duration: 100, user: user) - merge_request2.save! - - expect(milestone.total_time_spent).to eq(1200) - end - end end