From 3fc655904f90e407d95201d0b76114dce2e992d9 Mon Sep 17 00:00:00 2001
From: Jean-Philippe Lang <jp_lang@yahoo.fr>
Date: Mon, 16 Nov 2009 20:06:37 +0000
Subject: [PATCH] Copy issue status on project copy (#3877).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3075 e93f8b46-1217-0410-a6f0-8f06a7374b81
---
 app/models/issue.rb       |  1 +
 test/unit/issue_test.rb   | 10 ++++++++++
 test/unit/project_test.rb | 10 ++++++++++
 3 files changed, 21 insertions(+)

diff --git a/app/models/issue.rb b/app/models/issue.rb
index ea6eb1307..cfc2a1bc0 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -80,6 +80,7 @@ class Issue < ActiveRecord::Base
     issue = arg.is_a?(Issue) ? arg : Issue.find(arg)
     self.attributes = issue.attributes.dup.except("id", "created_on", "updated_on")
     self.custom_values = issue.custom_values.collect {|v| v.clone}
+    self.status = issue.status
     self
   end
   
diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb
index 84ccef601..3b0dd2697 100644
--- a/test/unit/issue_test.rb
+++ b/test/unit/issue_test.rb
@@ -178,6 +178,16 @@ class IssueTest < ActiveSupport::TestCase
     assert_equal orig.tracker, issue.tracker
     assert_equal orig.custom_values.first.value, issue.custom_values.first.value
   end
+
+  def test_copy_should_copy_status
+    orig = Issue.find(8)
+    assert orig.status != IssueStatus.default
+    
+    issue = Issue.new.copy_from(orig)
+    assert issue.save
+    issue.reload
+    assert_equal orig.status, issue.status
+  end
   
   def test_should_close_duplicates
     # Create 3 issues
diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb
index b4bb4cc11..93e4bbf22 100644
--- a/test/unit/project_test.rb
+++ b/test/unit/project_test.rb
@@ -406,6 +406,11 @@ class ProjectTest < ActiveSupport::TestCase
     end
 
     should "copy issues" do
+      @source_project.issues << Issue.generate!(:status_id => 5,
+                                                :subject => "copy issue status",
+                                                :tracker_id => 1,
+                                                :assigned_to_id => 2,
+                                                :project_id => @source_project.id)
       assert @project.valid?
       assert @project.issues.empty?
       assert @project.copy(@source_project)
@@ -416,6 +421,11 @@ class ProjectTest < ActiveSupport::TestCase
         assert ! issue.assigned_to.blank?
         assert_equal @project, issue.project
       end
+      
+      copied_issue = @project.issues.first(:conditions => {:subject => "copy issue status"})
+      assert copied_issue
+      assert copied_issue.status
+      assert_equal "Closed", copied_issue.status.name
     end
 
     should "change the new issues to use the copied version" do
-- 
GitLab