From 86eed08fbf4960737b43aa93db979781c54ac888 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Mon, 28 Mar 2011 17:35:20 +0000 Subject: [PATCH] Fixes progress calculation on gantt (#7838). Contributed by Etienne Massip. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5236 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/helpers/gantt.rb | 4 +-- test/unit/lib/redmine/helpers/gantt_test.rb | 28 +++++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb index 68f3dfaec..564feb209 100644 --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -639,10 +639,10 @@ module Redmine end if progress - progress_date = start_date + (end_date - start_date) * (progress / 100.0) + progress_date = start_date + (end_date - start_date + 1) * (progress / 100.0) if progress_date > self.date_from && progress_date > start_date if progress_date < self.date_to - coords[:bar_progress_end] = progress_date - self.date_from + 1 + coords[:bar_progress_end] = progress_date - self.date_from else coords[:bar_progress_end] = self.date_to - self.date_from + 1 end diff --git a/test/unit/lib/redmine/helpers/gantt_test.rb b/test/unit/lib/redmine/helpers/gantt_test.rb index 1f6d507b7..a32b41d27 100644 --- a/test/unit/lib/redmine/helpers/gantt_test.rb +++ b/test/unit/lib/redmine/helpers/gantt_test.rb @@ -547,9 +547,9 @@ class Redmine::Helpers::GanttTest < ActiveSupport::TestCase assert_select "div.version.task_done[style*=left:28px]", true, @response.body end - should "Be the total done width of the version" do + should "be the total done width of the version" do @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4}) - assert_select "div.version.task_done[style*=width:18px]", true, @response.body + assert_select "div.version.task_done[style*=width:16px]", true, @response.body end end @@ -707,9 +707,10 @@ class Redmine::Helpers::GanttTest < ActiveSupport::TestCase assert_select "div.task_done[style*=left:28px]", true, @response.body end - should "Be the total done width of the issue" do + should "be the total done width of the issue" do @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4}) - assert_select "div.task_done[style*=width:18px]", true, @response.body + # 15 days * 4 px * 30% - 2 px for borders = 16 px + assert_select "div.task_done[style*=width:16px]", true, @response.body end should "not be the total done width if the chart starts after issue start date" do @@ -717,7 +718,24 @@ class Redmine::Helpers::GanttTest < ActiveSupport::TestCase @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4}) assert_select "div.task_done[style*=left:0px]", true, @response.body - assert_select "div.task_done[style*=width:10px]", true, @response.body + assert_select "div.task_done[style*=width:8px]", true, @response.body + end + + context "for completed issue" do + setup do + @issue.done_ratio = 100 + end + + should "be the total width of the issue" do + @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4}) + assert_select "div.task_done[style*=width:58px]", true, @response.body + end + + should "be the total width of the issue with due_date=start_date" do + @issue.due_date = @issue.start_date + @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4}) + assert_select "div.task_done[style*=width:2px]", true, @response.body + end end end