diff options
-rw-r--r-- | app/models/issue.rb | 9 | ||||
-rw-r--r-- | lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb | 8 | ||||
-rw-r--r-- | test/functional/issues_controller_test.rb | 18 |
3 files changed, 32 insertions, 3 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 5bf845d84..b433da30b 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -302,16 +302,19 @@ class Issue < ActiveRecord::Base # * or if the status was not part of the new tracker statuses # * or the status was nil def tracker=(tracker) - if tracker != self.tracker + tracker_was = self.tracker + if tracker != tracker_was if status == default_status self.status = nil elsif status && tracker && !tracker.issue_status_ids.include?(status.id) self.status = nil end - @custom_field_values = nil @workflow_rule_by_attribute = nil end association(:tracker).writer(tracker) + if tracker != tracker_was + reassign_custom_field_values + end self.status ||= default_status self.tracker end @@ -355,7 +358,7 @@ class Issue < ActiveRecord::Base unless valid_parent_project? self.parent_issue_id = nil end - @custom_field_values = nil + reassign_custom_field_values @workflow_rule_by_attribute = nil end # Set fixed_version to the project default version if it's valid diff --git a/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb b/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb index 1cde646e9..050e442b4 100644 --- a/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb +++ b/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb @@ -151,6 +151,14 @@ module Redmine true end + def reassign_custom_field_values + if @custom_field_values + values = @custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h} + @custom_field_values = nil + self.custom_field_values = values + end + end + def reset_custom_values! @custom_field_values = nil @custom_field_values_changed = true diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 3021d0f42..38125feee 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -3001,6 +3001,24 @@ class IssuesControllerTest < ActionController::TestCase assert_equal issue.descendants.map(&:subject).sort, copy.descendants.map(&:subject).sort end + def test_create_as_copy_to_a_different_project_should_copy_subtask_custom_fields + issue = Issue.generate! {|i| i.custom_field_values = {'2' => 'Foo'}} + child = Issue.generate!(:parent_issue_id => issue.id) {|i| i.custom_field_values = {'2' => 'Bar'}} + @request.session[:user_id] = 1 + + assert_difference 'Issue.count', 2 do + post :create, :project_id => 'ecookbook', :copy_from => issue.id, + :issue => {:project_id => '2', :tracker_id => 1, :status_id => '1', + :subject => 'Copy with subtasks', :custom_field_values => {'2' => 'Foo'}}, + :copy_subtasks => '1' + end + + child_copy, issue_copy = Issue.order(:id => :desc).limit(2).to_a + assert_equal 2, issue_copy.project_id + assert_equal 'Foo', issue_copy.custom_field_value(2) + assert_equal 'Bar', child_copy.custom_field_value(2) + end + def test_create_as_copy_without_copy_subtasks_option_should_not_copy_subtasks @request.session[:user_id] = 2 issue = Issue.generate_with_descendants! |