diff --git a/app/models/issue.rb b/app/models/issue.rb index ffce8ea1..6f78ff1e 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -101,7 +101,7 @@ class Issue < ActiveRecord::Base def move_to(new_project, new_tracker = nil, options = {}) options ||= {} issue = options[:copy] ? self.clone : self - transaction do + ret = Issue.transaction do if new_project && issue.project_id != new_project.id # delete issue relations unless Setting.cross_project_issue_relations? @@ -138,12 +138,12 @@ class Issue < ActiveRecord::Base # Manually update project_id on related time entries TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id}) end + true else - Issue.connection.rollback_db_transaction - return false + raise ActiveRecord::Rollback end end - return issue + ret ? issue : false end def priority_id=(pid) diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index f0db47a3..cf536972 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -387,6 +387,16 @@ class IssueTest < ActiveSupport::TestCase assert_equal 7, issue.fixed_version_id end + def test_move_to_another_project_with_disabled_tracker + issue = Issue.find(1) + target = Project.find(2) + target.tracker_ids = [3] + target.save + assert_equal false, issue.move_to(target) + issue.reload + assert_equal 1, issue.project_id + end + def test_copy_to_the_same_project issue = Issue.find(1) copy = nil