Copy issues via bulk update action.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8538 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang
2012-01-07 17:27:47 +00:00
parent 464cef8643
commit 065376c160
13 changed files with 99 additions and 327 deletions
@@ -47,7 +47,7 @@ class ContextMenusControllerTest < ActionController::TestCase
:attributes => { :href => '/projects/ecookbook/issues/1/copy',
:class => 'icon-duplicate' }
assert_tag :tag => 'a', :content => 'Copy',
:attributes => { :href => '/issues/move/new?copy_options%5Bcopy%5D=t&amp;ids%5B%5D=1',
:attributes => { :href => '/issues/bulk_edit?copy=1&amp;ids%5B%5D=1',
:class => 'icon-copy' }
assert_no_tag :tag => 'a', :content => 'Move'
assert_tag :tag => 'a', :content => 'Delete',
@@ -86,7 +86,7 @@ class ContextMenusControllerTest < ActionController::TestCase
:attributes => { :href => "/issues/bulk_update?#{ids}&amp;issue%5Bassigned_to_id%5D=3",
:class => '' }
assert_tag :tag => 'a', :content => 'Copy',
:attributes => { :href => "/issues/move/new?copy_options%5Bcopy%5D=t&amp;#{ids}",
:attributes => { :href => "/issues/bulk_edit?copy=1&amp;#{ids}",
:class => 'icon-copy' }
assert_no_tag :tag => 'a', :content => 'Move'
assert_tag :tag => 'a', :content => 'Delete',
@@ -1,116 +0,0 @@
require File.expand_path('../../test_helper', __FILE__)
class IssueMovesControllerTest < ActionController::TestCase
fixtures :projects, :trackers, :issue_statuses, :issues,
:enumerations, :users, :issue_categories,
:projects_trackers,
:roles,
:member_roles,
:members,
:enabled_modules,
:workflows,
:journals, :journal_details
def setup
User.current = nil
end
def test_get_issue_moves_new
@request.session[:user_id] = 2
get :new, :id => 1
assert_tag :tag => 'option', :content => 'eCookbook',
:attributes => { :value => '1', :selected => 'selected' }
%w(new_tracker_id status_id priority_id assigned_to_id).each do |field|
assert_tag :tag => 'option', :content => '(No change)', :attributes => { :value => '' },
:parent => {:tag => 'select', :attributes => {:id => field}}
assert_no_tag :tag => 'option', :attributes => {:selected => 'selected'},
:parent => {:tag => 'select', :attributes => {:id => field}}
end
# Be sure we don't include inactive enumerations
assert ! IssuePriority.find(15).active?
assert_no_tag :option, :attributes => {:value => '15'},
:parent => {:tag => 'select', :attributes => {:id => 'priority_id'} }
end
def test_bulk_copy_to_another_project
@request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do
assert_no_difference 'Project.find(1).issues.count' do
post :create, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}
end
end
assert_redirected_to '/projects/ecookbook/issues'
end
context "#create via bulk copy" do
should "allow not changing the issue's attributes" do
@request.session[:user_id] = 2
issue_before_move = Issue.find(1)
assert_difference 'Issue.count', 1 do
assert_no_difference 'Project.find(1).issues.count' do
post :create, :ids => [1], :new_project_id => 2,
:copy_options => {:copy => '1'}, :new_tracker_id => '',
:assigned_to_id => '', :status_id => '',
:start_date => '', :due_date => ''
end
end
issue_after_move = Issue.first(:order => 'id desc', :conditions => {:project_id => 2})
assert_equal issue_before_move.tracker_id, issue_after_move.tracker_id
assert_equal issue_before_move.status_id, issue_after_move.status_id
assert_equal issue_before_move.assigned_to_id, issue_after_move.assigned_to_id
end
should "allow changing the issue's attributes" do
# Fixes random test failure with Mysql
# where Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
# doesn't return the expected results
Issue.delete_all("project_id=2")
@request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do
assert_no_difference 'Project.find(1).issues.count' do
post :create, :ids => [1, 2], :new_project_id => 2,
:copy_options => {:copy => '1'}, :new_tracker_id => '',
:assigned_to_id => 4, :status_id => 3,
:start_date => '2009-12-01', :due_date => '2009-12-31'
end
end
copied_issues = Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
assert_equal 2, copied_issues.size
copied_issues.each do |issue|
assert_equal 2, issue.project_id, "Project is incorrect"
assert_equal 4, issue.assigned_to_id, "Assigned to is incorrect"
assert_equal 3, issue.status_id, "Status is incorrect"
assert_equal '2009-12-01', issue.start_date.to_s, "Start date is incorrect"
assert_equal '2009-12-31', issue.due_date.to_s, "Due date is incorrect"
end
end
should "allow adding a note when copying" do
@request.session[:user_id] = 2
assert_difference 'Issue.count', 1 do
post :create, :ids => [1], :copy_options => {:copy => '1'},
:notes => 'Copying one issue', :new_tracker_id => '',
:assigned_to_id => 4, :status_id => 3,
:start_date => '2009-12-01', :due_date => '2009-12-31'
end
issue = Issue.first(:order => 'id DESC')
assert_equal 1, issue.journals.size
journal = issue.journals.first
assert_equal 0, journal.details.size
assert_equal 'Copying one issue', journal.notes
end
end
def test_copy_to_another_project_should_follow_when_needed
@request.session[:user_id] = 2
post :create, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :follow => '1'
issue = Issue.first(:order => 'id DESC')
assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
end
end
+81
View File
@@ -2319,6 +2319,87 @@ class IssuesControllerTest < ActionController::TestCase
assert_redirected_to :controller => 'issues', :action => 'index', :project_id => Project.find(1).identifier
end
def test_bulk_copy_to_another_project
@request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do
assert_no_difference 'Project.find(1).issues.count' do
post :bulk_update, :ids => [1, 2], :issue => {:project_id => '2'}, :copy => '1'
end
end
assert_redirected_to '/projects/ecookbook/issues'
end
def test_bulk_copy_should_allow_not_changing_the issue_attributes
@request.session[:user_id] = 2
issue_before_move = Issue.find(1)
assert_difference 'Issue.count', 1 do
assert_no_difference 'Project.find(1).issues.count' do
post :bulk_update, :ids => [1], :copy => '1',
:issue => {
:project_id => '2', :tracker_id => '', :assigned_to_id => '',
:status_id => '', :start_date => '', :due_date => ''
}
end
end
issue_after_move = Issue.first(:order => 'id desc', :conditions => {:project_id => 2})
assert_equal issue_before_move.tracker_id, issue_after_move.tracker_id
assert_equal issue_before_move.status_id, issue_after_move.status_id
assert_equal issue_before_move.assigned_to_id, issue_after_move.assigned_to_id
end
def test_bulk_copy_should_allow_changing_the_issue_attributes
# Fixes random test failure with Mysql
# where Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
# doesn't return the expected results
Issue.delete_all("project_id=2")
@request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do
assert_no_difference 'Project.find(1).issues.count' do
post :bulk_update, :ids => [1, 2], :copy => '1',
:issue => {
:project_id => '2', :tracker_id => '', :assigned_to_id => '4',
:status_id => '3', :start_date => '2009-12-01', :due_date => '2009-12-31'
}
end
end
copied_issues = Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
assert_equal 2, copied_issues.size
copied_issues.each do |issue|
assert_equal 2, issue.project_id, "Project is incorrect"
assert_equal 4, issue.assigned_to_id, "Assigned to is incorrect"
assert_equal 3, issue.status_id, "Status is incorrect"
assert_equal '2009-12-01', issue.start_date.to_s, "Start date is incorrect"
assert_equal '2009-12-31', issue.due_date.to_s, "Due date is incorrect"
end
end
def test_bulk_copy_should_allow_adding_a_note
@request.session[:user_id] = 2
assert_difference 'Issue.count', 1 do
post :bulk_update, :ids => [1], :copy => '1',
:notes => 'Copying one issue',
:issue => {
:project_id => '', :tracker_id => '', :assigned_to_id => '4',
:status_id => '3', :start_date => '2009-12-01', :due_date => '2009-12-31'
}
end
issue = Issue.first(:order => 'id DESC')
assert_equal 1, issue.journals.size
journal = issue.journals.first
assert_equal 0, journal.details.size
assert_equal 'Copying one issue', journal.notes
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'
issue = Issue.first(:order => 'id DESC')
assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
end
def test_destroy_issue_with_no_time_entries
assert_nil TimeEntry.find_by_issue_id(2)
@request.session[:user_id] = 2
@@ -1,31 +0,0 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../../test_helper', __FILE__)
class RoutingIssueMovesTest < ActionController::IntegrationTest
def test_issue_moves
assert_routing(
{ :method => 'get', :path => "/issues/move/new" },
{ :controller => 'issue_moves', :action => 'new' }
)
assert_routing(
{ :method => 'post', :path => "/issues/move" },
{ :controller => 'issue_moves', :action => 'create' }
)
end
end