# HG changeset patch # User Toshi MARUYAMA # Date 1568636652 -32400 # Mon Sep 16 21:24:12 2019 +0900 # Branch issue-28492-03 # Node ID 84c66c32c0b3bd5c4638df49020b1c57c1cb96a8 # Parent 05151f84dbde8d2ca9b443d7faaa7b48ebcc25fa add setting (#28492) diff --git a/app/views/settings/_issues.html.erb b/app/views/settings/_issues.html.erb --- a/app/views/settings/_issues.html.erb +++ b/app/views/settings/_issues.html.erb @@ -7,6 +7,8 @@

<%= setting_select :cross_project_subtasks, cross_project_subtasks_options %>

+

<%= setting_check_box :closed_parent_issues_with_open_subtasks %>

+

<%= setting_check_box :close_duplicate_issues %>

<%= setting_check_box :issue_group_assignment %>

diff --git a/config/locales/en.yml b/config/locales/en.yml --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -420,6 +420,7 @@ en: setting_timespan_format: Time span format setting_cross_project_issue_relations: Allow cross-project issue relations setting_cross_project_subtasks: Allow cross-project subtasks + setting_closed_parent_issues_with_open_subtasks: Allow closed parent issues with open subtasks setting_issue_list_default_columns: Isuses list defaults setting_repositories_encodings: Attachments and repositories encodings setting_emails_header: Email header diff --git a/config/settings.yml b/config/settings.yml --- a/config/settings.yml +++ b/config/settings.yml @@ -177,6 +177,8 @@ parent_issue_done_ratio: default: 'derived' link_copied_issue: default: 'ask' +closed_parent_issues_with_open_subtasks: + default: 0 close_duplicate_issues: default: 1 issue_group_assignment: # HG changeset patch # User Toshi MARUYAMA # Date 1568768189 -32400 # Wed Sep 18 09:56:29 2019 +0900 # Branch issue-28492-03 # Node ID e8dbd640f1489bf7ba891a3a02290d40ef68d792 # Parent 84c66c32c0b3bd5c4638df49020b1c57c1cb96a8 implement (#28492) diff --git a/app/models/issue.rb b/app/models/issue.rb --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -972,7 +972,7 @@ class Issue < ActiveRecord::Base # Returns true if this issue can be closed and if not, returns false and populates the reason def closable? - if descendants.open.any? + if !Setting.closed_parent_issues_with_open_subtasks? && descendants.open.any? @transition_warning = l(:notice_issue_not_closable_by_open_tasks) return false end # HG changeset patch # User Toshi MARUYAMA # Date 1568773474 -32400 # Wed Sep 18 11:24:34 2019 +0900 # Branch issue-28492-03 # Node ID db88e7b805e73ef54477fbae84f8b63f736e12bd # Parent e8dbd640f1489bf7ba891a3a02290d40ef68d792 add test (#28492) diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -2099,17 +2099,28 @@ class IssueTest < ActiveSupport::TestCas assert !closed_statuses.empty? end - def test_parent_issues_with_open_subtask_dont_allow_closed_statuses + test "test parent issues with open subtask dont allow closed statuses if setting is false" do parent = Issue.generate! child = Issue.generate!(:parent_issue_id => parent.id) - - allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) - - assert !parent.closable? - assert_equal l(:notice_issue_not_closable_by_open_tasks), parent.transition_warning - - assert allowed_statuses.any? - assert_equal [], allowed_statuses.select(&:is_closed?) + with_settings :closed_parent_issues_with_open_subtasks => 0 do + allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) + assert !parent.closable? + assert_equal l(:notice_issue_not_closable_by_open_tasks), parent.transition_warning + assert allowed_statuses.any? + assert_equal [], allowed_statuses.select(&:is_closed?) + end + end + + test "test parent issues with open subtask allow closed statuses if setting is true" do + parent = Issue.generate! + child = Issue.generate!(:parent_issue_id => parent.id) + with_settings :closed_parent_issues_with_open_subtasks => 1 do + allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) + assert parent.closable? + assert_nil parent.transition_warning + assert allowed_statuses.any? + assert allowed_statuses.select(&:is_closed?).any? + end end def test_parent_issues_with_closed_subtask_allow_closed_statuses