summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-04-14 06:21:03 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-04-14 06:21:03 +0000
commit231282ddcb73e9baaab76496bf2605a80594da36 (patch)
tree7743a570122b38edf288eb275ebd1d9076efa88d
parent09375960d69dcca6dafe4b126b77994f523efba8 (diff)
downloadredmine-231282ddcb73e9baaab76496bf2605a80594da36.tar.gz
redmine-231282ddcb73e9baaab76496bf2605a80594da36.zip
Fixed MissingFeatureException: let user choose to copy attachments or not when bulk copying issues.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9405 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/issues_controller.rb5
-rw-r--r--app/models/issue.rb4
-rw-r--r--app/views/issues/bulk_edit.html.erb7
-rw-r--r--test/functional/issues_controller_test.rb45
4 files changed, 57 insertions, 4 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 84ff8fd23..cffb69b61 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -235,6 +235,9 @@ class IssuesController < ApplicationController
@trackers = target_projects.map(&:trackers).reduce(:&)
@versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
@categories = target_projects.map {|p| p.issue_categories}.reduce(:&)
+ if @copy
+ @attachments_present = @issues.detect {|i| i.attachments.any?}.present?
+ end
@safe_attributes = @issues.map(&:safe_attribute_names).reduce(:&)
render :layout => false if request.xhr?
@@ -250,7 +253,7 @@ class IssuesController < ApplicationController
@issues.each do |issue|
issue.reload
if @copy
- issue = issue.copy
+ issue = issue.copy({}, :attachments => params[:copy_attachments].present?)
end
journal = issue.init_journal(User.current, params[:notes])
issue.safe_attributes = attributes
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 8ebc20fc0..d72ff4dcf 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -145,8 +145,8 @@ class Issue < ActiveRecord::Base
end
# Returns an unsaved copy of the issue
- def copy(attributes=nil)
- copy = self.class.new.copy_from(self)
+ def copy(attributes=nil, copy_options={})
+ copy = self.class.new.copy_from(self, copy_options)
copy.attributes = attributes if attributes
copy
end
diff --git a/app/views/issues/bulk_edit.html.erb b/app/views/issues/bulk_edit.html.erb
index 0263ab916..e81676ada 100644
--- a/app/views/issues/bulk_edit.html.erb
+++ b/app/views/issues/bulk_edit.html.erb
@@ -60,6 +60,13 @@
<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %></p>
<% end %>
+<% if @copy && @attachments_present %>
+<p>
+ <label for='copy_attachments'><%= l(:label_copy_attachments) %></label>
+ <%= check_box_tag 'copy_attachments', '1', true %>
+</p>
+<% end %>
+
<%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %>
</div>
diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb
index 1b0224dfb..e039468c2 100644
--- a/test/functional/issues_controller_test.rb
+++ b/test/functional/issues_controller_test.rb
@@ -3057,6 +3057,19 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal 'Failed to save 1 issue(s) on 2 selected: #2.', flash[:error]
end
+ def test_get_bulk_copy
+ @request.session[:user_id] = 2
+ get :bulk_edit, :ids => [1, 2, 3], :copy => '1'
+ assert_response :success
+ assert_template 'bulk_edit'
+
+ issues = assigns(:issues)
+ assert_not_nil issues
+ assert_equal [1, 2, 3], issues.map(&:id).sort
+
+ assert_select 'input[name=copy_attachments]'
+ end
+
def test_bulk_copy_to_another_project
@request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do
@@ -3099,7 +3112,7 @@ class IssuesControllerTest < ActionController::TestCase
end
end
- def test_bulk_copy_should_allow_changing_the_issue_attributes
+ 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
@@ -3145,6 +3158,36 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal 'Copying one issue', journal.notes
end
+ def test_bulk_copy_should_allow_not_copying_the_attachments
+ attachment_count = Issue.find(3).attachments.size
+ assert attachment_count > 0
+ @request.session[:user_id] = 2
+
+ assert_difference 'Issue.count', 1 do
+ assert_no_difference 'Attachment.count' do
+ post :bulk_update, :ids => [3], :copy => '1',
+ :issue => {
+ :project_id => ''
+ }
+ end
+ end
+ end
+
+ def test_bulk_copy_should_allow_copying_the_attachments
+ attachment_count = Issue.find(3).attachments.size
+ assert attachment_count > 0
+ @request.session[:user_id] = 2
+
+ assert_difference 'Issue.count', 1 do
+ assert_difference 'Attachment.count', attachment_count do
+ post :bulk_update, :ids => [3], :copy => '1', :copy_attachments => '1',
+ :issue => {
+ :project_id => ''
+ }
+ end
+ end
+ 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'