summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/issues_controller.rb8
-rw-r--r--test/functional/issues_controller_test.rb12
2 files changed, 19 insertions, 1 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 051f89107..66aa00ca2 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -236,7 +236,13 @@ class IssuesController < ApplicationController
return unless api_request?
end
end
- @issues.each(&:destroy)
+ @issues.each do |issue|
+ begin
+ issue.reload.destroy
+ rescue ::ActiveRecord::RecordNotFound # raised by #reload if issue no longer exists
+ # nothing to do, issue was already deleted (eg. by a parent)
+ end
+ end
respond_to do |format|
format.html { redirect_back_or_default(:action => 'index', :project_id => @project) }
format.api { head :ok }
diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb
index b21b28e66..b0fac1657 100644
--- a/test/functional/issues_controller_test.rb
+++ b/test/functional/issues_controller_test.rb
@@ -1286,6 +1286,18 @@ class IssuesControllerTest < ActionController::TestCase
assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6))
end
+ def test_destroy_parent_and_child_issues
+ parent = Issue.generate!(:project_id => 1, :tracker_id => 1)
+ child = Issue.generate!(:project_id => 1, :tracker_id => 1, :parent_issue_id => parent.id)
+ assert child.is_descendant_of?(parent.reload)
+
+ @request.session[:user_id] = 2
+ assert_difference 'Issue.count', -2 do
+ post :destroy, :ids => [parent.id, child.id], :todo => 'destroy'
+ end
+ assert_response 302
+ end
+
def test_default_search_scope
get :index
assert_tag :div, :attributes => {:id => 'quick-search'},