From bfdd9f7c295d539a9f8aeb22f965a620ea415224 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 30 Dec 2014 11:24:00 +0000 Subject: [PATCH] The descendant count in the issues delete confirmation message is wrong if issues share some descendants. git-svn-id: http://svn.redmine.org/redmine/trunk@13818 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/helpers/issues_helper.rb | 20 ++++++++++---------- test/unit/helpers/issues_helper_test.rb | 10 ++++++++++ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 47f972552..44b8e1be4 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -180,20 +180,20 @@ module IssuesHelper s.html_safe end + # Returns the number of descendants for an array of issues + def issues_descendant_count(issues) + ids = issues.reject(&:leaf?).map {|issue| issue.descendants.ids}.flatten.uniq + ids -= issues.map(&:id) + ids.size + end + def issues_destroy_confirmation_message(issues) issues = [issues] unless issues.is_a?(Array) message = l(:text_issues_destroy_confirmation) - descendant_count = issues.inject(0) {|memo, i| memo += (i.right - i.left - 1)/2} + + descendant_count = issues_descendant_count(issues) if descendant_count > 0 - issues.each do |issue| - next if issue.root? - issues.each do |other_issue| - descendant_count -= 1 if issue.is_descendant_of?(other_issue) - end - end - if descendant_count > 0 - message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count) - end + message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count) end message end diff --git a/test/unit/helpers/issues_helper_test.rb b/test/unit/helpers/issues_helper_test.rb index cf681882c..393533fd3 100644 --- a/test/unit/helpers/issues_helper_test.rb +++ b/test/unit/helpers/issues_helper_test.rb @@ -68,6 +68,16 @@ class IssuesHelperTest < ActionView::TestCase issues_destroy_confirmation_message(Issue.find([1, 2])) end + def test_issues_destroy_confirmation_message_with_issues_that_share_descendants + root = Issue.generate! + child = Issue.generate!(:parent_issue_id => root.id) + Issue.generate!(:parent_issue_id => child.id) + + assert_equal l(:text_issues_destroy_confirmation) + "\n" + + l(:text_issues_destroy_descendants_confirmation, :count => 1), + issues_destroy_confirmation_message([root.reload, child.reload]) + end + test 'show_detail with no_html should show a changing attribute' do detail = JournalDetail.new(:property => 'attr', :old_value => '40', :value => '100', :prop_key => 'done_ratio') -- 2.39.5