Option to copy subtasks when copying issue(s) (#6965).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10327 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang
2012-09-08 05:34:07 +00:00
parent ffcf1925e3
commit 5003927f13
9 changed files with 159 additions and 2 deletions
+66
View File
@@ -2268,6 +2268,14 @@ class IssuesControllerTest < ActionController::TestCase
assert_no_tag 'input', :attributes => {:name => 'copy_attachments', :type => 'checkbox', :checked => 'checked', :value => '1'}
end
def test_new_as_copy_with_subtasks_should_show_copy_subtasks_checkbox
@request.session[:user_id] = 2
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
get :new, :project_id => 1, :copy_from => issue.id
assert_select 'input[type=checkbox][name=copy_subtasks][checked=checked][value=1]'
end
def test_new_as_copy_with_invalid_issue_should_respond_with_404
@request.session[:user_id] = 2
get :new, :project_id => 1, :copy_from => 99999
@@ -2349,6 +2357,37 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal count + 1, copy.attachments.count
end
def test_create_as_copy_should_copy_subtasks
@request.session[:user_id] = 2
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
count = issue.descendants.count
assert_difference 'Issue.count', count+1 do
assert_no_difference 'Journal.count' do
post :create, :project_id => 1, :copy_from => issue.id,
:issue => {:project_id => '1', :tracker_id => '3', :status_id => '1', :subject => 'Copy with subtasks'},
:copy_subtasks => '1'
end
end
copy = Issue.where(:parent_id => nil).first(:order => 'id DESC')
assert_equal count, copy.descendants.count
assert_equal issue.descendants.map(&:subject).sort, copy.descendants.map(&:subject).sort
end
def test_create_as_copy_without_copy_subtasks_option_should_not_copy_subtasks
@request.session[:user_id] = 2
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
assert_difference 'Issue.count', 1 do
assert_no_difference 'Journal.count' do
post :create, :project_id => 1, :copy_from => 3,
:issue => {:project_id => '1', :tracker_id => '3', :status_id => '1', :subject => 'Copy with subtasks'}
end
end
copy = Issue.where(:parent_id => nil).first(:order => 'id DESC')
assert_equal 0, copy.descendants.count
end
def test_create_as_copy_with_failure
@request.session[:user_id] = 2
post :create, :project_id => 1, :copy_from => 1,
@@ -3473,6 +3512,33 @@ class IssuesControllerTest < ActionController::TestCase
end
end
def test_bulk_copy_should_allow_not_copying_the_subtasks
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
@request.session[:user_id] = 2
assert_difference 'Issue.count', 1 do
post :bulk_update, :ids => [issue.id], :copy => '1',
:issue => {
:project_id => ''
}
end
end
def test_bulk_copy_should_allow_copying_the_subtasks
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
count = issue.descendants.count
@request.session[:user_id] = 2
assert_difference 'Issue.count', count+1 do
post :bulk_update, :ids => [issue.id], :copy => '1', :copy_subtasks => '1',
:issue => {
:project_id => ''
}
end
copy = Issue.where(:parent_id => nil).order("id DESC").first
assert_equal count, copy.descendants.count
end
def test_bulk_copy_to_another_project_should_follow_when_needed
@request.session[:user_id] = 2
post :bulk_update, :ids => [1], :copy => '1', :issue => {:project_id => 2}, :follow => '1'
+9
View File
@@ -81,6 +81,15 @@ module ObjectHelpers
issue
end
# Generates an issue with some children and a grandchild
def Issue.generate_with_descendants!(project, attributes={})
issue = Issue.generate_for_project!(project, attributes)
child = Issue.generate_for_project!(project, :subject => 'Child1', :parent_issue_id => issue.id)
Issue.generate_for_project!(project, :subject => 'Child2', :parent_issue_id => issue.id)
Issue.generate_for_project!(project, :subject => 'Child11', :parent_issue_id => child.id)
issue.reload
end
def Version.generate!(attributes={})
@generated_version_name ||= 'Version 0'
@generated_version_name.succ!
+35
View File
@@ -633,6 +633,41 @@ class IssueTest < ActiveSupport::TestCase
assert_equal orig.status, issue.status
end
def test_copy_should_copy_subtasks
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
copy = issue.reload.copy
copy.author = User.find(7)
assert_difference 'Issue.count', 1+issue.descendants.count do
assert copy.save
end
copy.reload
assert_equal %w(Child1 Child2), copy.children.map(&:subject).sort
child_copy = copy.children.detect {|c| c.subject == 'Child1'}
assert_equal %w(Child11), child_copy.children.map(&:subject).sort
assert_equal copy.author, child_copy.author
end
def test_copy_should_copy_subtasks_to_target_project
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
copy = issue.copy(:project_id => 3)
assert_difference 'Issue.count', 1+issue.descendants.count do
assert copy.save
end
assert_equal [3], copy.reload.descendants.map(&:project_id).uniq
end
def test_copy_should_not_copy_subtasks_twice_when_saving_twice
issue = Issue.generate_with_descendants!(Project.find(1), :subject => 'Parent')
copy = issue.reload.copy
assert_difference 'Issue.count', 1+issue.descendants.count do
assert copy.save
assert copy.save
end
end
def test_should_not_call_after_project_change_on_creation
issue = Issue.new(:project_id => 1, :tracker_id => 1, :status_id => 1, :subject => 'Test', :author_id => 1)
issue.expects(:after_project_change).never