From 11e0244af9c9cefde0cca91f97df3c8162a0465c Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Tue, 29 Sep 2026 19:25:08 +0900 Subject: [PATCH] Reset % Done to the default value of a new issue when copying an issue --- app/models/issue.rb | 3 ++- test/unit/issue_test.rb | 32 ++++++++++++++++++++++++++++++++ test/unit/project_copy_test.rb | 2 ++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index 8a55fc361..f8d88286f 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -317,7 +317,7 @@ class Issue < ApplicationRecord self.attributes = issue.attributes.dup.except( "id", "root_id", "parent_id", "lft", "rgt", - "created_on", "updated_on", "status_id", "closed_on" + "created_on", "updated_on", "status_id", "closed_on", "done_ratio" ) self.custom_field_values = issue.custom_field_values.to_h do |v| @@ -325,6 +325,7 @@ class Issue < ApplicationRecord end if options[:keep_status] self.status = issue.status + self.done_ratio = issue.read_attribute(:done_ratio) end self.author = User.current unless options[:attachments] == false diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index cc92b8f8e..741688850 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -1398,6 +1398,38 @@ class IssueTest < ActiveSupport::TestCase assert_equal orig.status, issue.status end + def test_copy_should_reset_done_ratio_to_default_value + with_settings :issue_done_ratio => 'issue_field' do + orig = Issue.generate!(:done_ratio => 80) + + issue = Issue.new.copy_from(orig) + assert_equal 0, issue.done_ratio + assert issue.save + assert_equal 0, issue.reload.done_ratio + end + end + + def test_copy_should_use_default_done_ratio_of_default_status_when_done_ratio_is_based_on_issue_status + IssueStatus.find(1).update!(:default_done_ratio => 20) + with_settings :issue_done_ratio => 'issue_status' do + orig = Issue.generate!(:status_id => 2, :done_ratio => 80) + + issue = Issue.new.copy_from(orig) + assert_equal 1, issue.status_id + assert_equal 20, issue.done_ratio + assert issue.save + assert_equal 20, issue.reload.done_ratio + end + end + + def test_copy_with_keep_status_should_copy_done_ratio + orig = Issue.generate!(:status_id => 2, :done_ratio => 80) + + issue = Issue.new.copy_from(orig, :keep_status => true) + assert issue.save + assert_equal 80, issue.reload.done_ratio + end + def test_copy_should_add_relation_with_copied_issue copied = Issue.find(1) issue = Issue.new.copy_from(copied) diff --git a/test/unit/project_copy_test.rb b/test/unit/project_copy_test.rb index 8cad4f020..66f634733 100644 --- a/test/unit/project_copy_test.rb +++ b/test/unit/project_copy_test.rb @@ -46,6 +46,7 @@ class ProjectCopyTest < ActiveSupport::TestCase test "#copy should copy issues" do @source_project.issues << Issue.generate!(:status => IssueStatus.find_by_name('Closed'), :subject => "copy issue status", + :done_ratio => 80, :tracker_id => 1, :assigned_to_id => 2, :project_id => @source_project.id) @@ -64,6 +65,7 @@ class ProjectCopyTest < ActiveSupport::TestCase assert copied_issue assert copied_issue.status assert_equal "Closed", copied_issue.status.name + assert_equal 80, copied_issue.done_ratio end test "#copy should copy issues custom values" do -- 2.55.0