git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6311 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/1.3.0
@@ -252,6 +252,20 @@ class IssueNestedSetTest < ActiveSupport::TestCase | |||
root = Issue.find(root.id) | |||
assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})" | |||
end | |||
def test_destroy_issue_with_grand_child | |||
parent = create_issue! | |||
issue = create_issue!(:parent_issue_id => parent.id) | |||
child = create_issue!(:parent_issue_id => issue.id) | |||
grandchild1 = create_issue!(:parent_issue_id => child.id) | |||
grandchild2 = create_issue!(:parent_issue_id => child.id) | |||
assert_difference 'Issue.count', -4 do | |||
Issue.find(issue.id).destroy | |||
parent.reload | |||
assert_equal [1, 2], [parent.lft, parent.rgt] | |||
end | |||
end | |||
def test_parent_priority_should_be_the_highest_child_priority | |||
parent = create_issue!(:priority => IssuePriority.find_by_name('Normal')) |
@@ -446,16 +446,16 @@ module CollectiveIdea #:nodoc: | |||
def prune_from_tree | |||
return if right.nil? || left.nil? || leaf? || !self.class.exists?(id) | |||
delete_method = acts_as_nested_set_options[:dependent] == :destroy ? | |||
:destroy_all : :delete_all | |||
# TODO: should destroy children (not descendants) when deleted_method is :destroy_all | |||
self.class.base_class.transaction do | |||
reload_nested_set | |||
nested_set_scope.send(delete_method, | |||
["#{quoted_left_column_name} > ? AND #{quoted_right_column_name} < ?", | |||
left, right] | |||
) | |||
if acts_as_nested_set_options[:dependent] == :destroy | |||
children.each(&:destroy) | |||
else | |||
nested_set_scope.send(:delete_all, | |||
["#{quoted_left_column_name} > ? AND #{quoted_right_column_name} < ?", | |||
left, right] | |||
) | |||
end | |||
reload_nested_set | |||
diff = right - left + 1 | |||
nested_set_scope.update_all( |