# * or if the status was not part of the new tracker statuses
# * or the status was nil
def tracker=(tracker)
- if tracker != self.tracker
- if status == default_status
+ tracker_was = self.tracker
+ association(:tracker).writer(tracker)
+ if tracker != tracker_was
+ if status == tracker_was.try(:default_status)
self.status = nil
elsif status && tracker && !tracker.issue_status_ids.include?(status.id)
self.status = nil
end
- @custom_field_values = nil
+ reassign_custom_field_values
@workflow_rule_by_attribute = nil
end
- association(:tracker).writer(tracker)
self.status ||= default_status
self.tracker
end
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
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
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!