# HG changeset patch # User Toshi MARUYAMA # Date 1570533800 -32400 # Tue Oct 08 20:23:20 2019 +0900 # Node ID 9a1e89ffd5505e3aed0d64eedf987b81d3b137d4 # Parent 7b790f7d9d07cc4cf578863e4a285cb986b000a3 use "test do" syntax for "test_parent_issues_with_open_subtask_dont_allow_closed_statuses" (#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 @@ -2082,7 +2082,7 @@ 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" do parent = Issue.generate! child = Issue.generate!(:parent_issue_id => parent.id) # HG changeset patch # User Toshi MARUYAMA # Date 1568636652 -32400 # Mon Sep 16 21:24:12 2019 +0900 # Node ID 7b790f7d9d07cc4cf578863e4a285cb986b000a3 # Parent d98c5ec5c5ea3b812b74fc85d861bf1ae4e2957e 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 :close_parent_issue_whose_subtasks_are_open %>

+

<%= 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 @@ -416,6 +416,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_close_parent_issue_whose_subtasks_are_open: Allow closing parent issue whose subtasks are open 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' +close_parent_issue_whose_subtasks_are_open: + 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 # Node ID 46d5ce381fa499bbde64a0fdef73995202cbf337 # Parent 37f6a2e8d8028abd53230d0448abfb84cb725907 implement (#28492) diff --git a/app/models/issue.rb b/app/models/issue.rb --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1009,8 +1009,7 @@ class Issue < ActiveRecord::Base statuses << default_status if include_default || (new_record? && statuses.empty?) statuses = statuses.compact.uniq.sort - if blocked? || descendants.open.any? - # cannot close a blocked issue or a parent with open subtasks + if blocked? || (!Setting.close_parent_issue_whose_subtasks_are_open? && descendants.open.any?) statuses.reject!(&:is_closed?) end if ancestors.open(false).any? # HG changeset patch # User Toshi MARUYAMA # Date 1568773474 -32400 # Wed Sep 18 11:24:34 2019 +0900 # Node ID 79e9477d7fbd59f3b2fb6f7ae24df98457e4fa55 # Parent 2568b5e445deb0cf5c3e7b7b9a02033bd579f3bd 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 @@ -2082,13 +2082,24 @@ class IssueTest < ActiveSupport::TestCas assert !closed_statuses.empty? end - test "test parent issues with open subtask dont allow closed statuses" do + 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 allowed_statuses.any? - assert_equal [], allowed_statuses.select(&:is_closed?) + with_settings :close_parent_issue_whose_subtasks_are_open => 0 do + allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) + 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 :close_parent_issue_whose_subtasks_are_open => 1 do + allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) + assert allowed_statuses.any? + assert allowed_statuses.select(&:is_closed?).any? + end end def test_parent_issues_with_closed_subtask_allow_closed_statuses