From 231282ddcb73e9baaab76496bf2605a80594da36 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 14 Apr 2012 06:21:03 +0000 Subject: [PATCH] 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 --- app/controllers/issues_controller.rb | 5 ++- app/models/issue.rb | 4 +- app/views/issues/bulk_edit.html.erb | 7 ++++ test/functional/issues_controller_test.rb | 45 ++++++++++++++++++++++- 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 @@

<%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %>

<% end %> +<% if @copy && @attachments_present %> +

+ + <%= check_box_tag 'copy_attachments', '1', true %> +

+<% end %> + <%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %> 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' -- 2.39.5