From a28bf20c4ca2c422aceed602c398adf3aa85f92c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 20 Sep 2015 12:50:06 +0000 Subject: [PATCH] Project copy does not update custom field of version type values (#20361). git-svn-id: http://svn.redmine.org/redmine/trunk@14615 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/project.rb | 16 ++++++++++++++++ test/unit/project_copy_test.rb | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/models/project.rb b/app/models/project.rb index 2138773cf..8cd2bf993 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -899,6 +899,22 @@ class Project < ActiveRecord::Base if issue.fixed_version && issue.fixed_version.project == project new_issue.fixed_version = self.versions.detect {|v| v.name == issue.fixed_version.name} end + # Reassign version custom field values + new_issue.custom_field_values.each do |custom_value| + if custom_value.custom_field.field_format == 'version' && custom_value.value.present? + versions = Version.where(:id => custom_value.value).to_a + new_value = versions.map do |version| + if version.project == project + self.versions.detect {|v| v.name == version.name}.try(:id) + else + version.id + end + end + new_value.compact! + new_value = new_value.first unless custom_value.custom_field.multiple? + custom_value.value = new_value + end + end # Reassign the category by name, since names are unique per project if issue.category new_issue.category = self.issue_categories.detect {|c| c.name == issue.category.name} diff --git a/test/unit/project_copy_test.rb b/test/unit/project_copy_test.rb index d375d8fbc..537e39385 100644 --- a/test/unit/project_copy_test.rb +++ b/test/unit/project_copy_test.rb @@ -139,6 +139,27 @@ class ProjectCopyTest < ActiveSupport::TestCase assert_equal assigned_version, copied_issue.fixed_version end + def test_copy_issues_should_reassign_version_custom_fields_to_copied_versions + User.current = User.find(1) + CustomField.delete_all + field = IssueCustomField.generate!(:field_format => 'version', :is_for_all => true, :trackers => Tracker.all) + source_project = Project.generate!(:trackers => Tracker.all) + source_version = Version.generate!(:project => source_project) + source_issue = Issue.generate!(:project => source_project) do |issue| + issue.custom_field_values = {field.id.to_s => source_version.id.to_s} + end + assert_equal source_version.id.to_s, source_issue.custom_field_value(field) + + project = Project.new(:name => 'Copy Test', :identifier => 'copy-test', :trackers => Tracker.all) + assert project.copy(source_project) + assert_equal 1, project.issues.count + issue = project.issues.first + assert_equal 1, project.versions.count + version = project.versions.first + + assert_equal version.id.to_s, issue.custom_field_value(field) + end + test "#copy should copy issue relations" do Setting.cross_project_issue_relations = '1' -- 2.39.5