Browse Source

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
tags/2.0.0
Jean-Philippe Lang 12 years ago
parent
commit
231282ddcb

+ 4
- 1
app/controllers/issues_controller.rb View File

@trackers = target_projects.map(&:trackers).reduce(:&) @trackers = target_projects.map(&:trackers).reduce(:&)
@versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&) @versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
@categories = target_projects.map {|p| p.issue_categories}.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(:&) @safe_attributes = @issues.map(&:safe_attribute_names).reduce(:&)
render :layout => false if request.xhr? render :layout => false if request.xhr?
@issues.each do |issue| @issues.each do |issue|
issue.reload issue.reload
if @copy if @copy
issue = issue.copy
issue = issue.copy({}, :attachments => params[:copy_attachments].present?)
end end
journal = issue.init_journal(User.current, params[:notes]) journal = issue.init_journal(User.current, params[:notes])
issue.safe_attributes = attributes issue.safe_attributes = attributes

+ 2
- 2
app/models/issue.rb View File

end end


# Returns an unsaved copy of the issue # 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.attributes = attributes if attributes
copy copy
end end

+ 7
- 0
app/views/issues/bulk_edit.html.erb View File

<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %></p> <p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %></p>
<% end %> <% 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 }) %> <%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %>
</div> </div>



+ 44
- 1
test/functional/issues_controller_test.rb View File

assert_equal 'Failed to save 1 issue(s) on 2 selected: #2.', flash[:error] assert_equal 'Failed to save 1 issue(s) on 2 selected: #2.', flash[:error]
end 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 def test_bulk_copy_to_another_project
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do assert_difference 'Issue.count', 2 do
end end
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 # Fixes random test failure with Mysql
# where Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2}) # where Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
# doesn't return the expected results # doesn't return the expected results
assert_equal 'Copying one issue', journal.notes assert_equal 'Copying one issue', journal.notes
end 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 def test_bulk_copy_to_another_project_should_follow_when_needed
@request.session[:user_id] = 2 @request.session[:user_id] = 2
post :bulk_update, :ids => [1], :copy => '1', :issue => {:project_id => 2}, :follow => '1' post :bulk_update, :ids => [1], :copy => '1', :issue => {:project_id => 2}, :follow => '1'

Loading…
Cancel
Save