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'))
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(