From 36b5c3204891aa63ff24cf6da434170cdcfdad5e Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Sun, 27 Dec 2020 06:46:37 +0000 Subject: [PATCH] Subprojects issues are not displayed on main project when all subprojects are closed (#34297). Patch by Yuichi HARADA and Go MAEDA. git-svn-id: http://svn.redmine.org/redmine/trunk@20693 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 8 ++++---- test/functional/issues_controller_test.rb | 19 +++++++++++++++++++ test/unit/query_test.rb | 11 +++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/models/query.rb b/app/models/query.rb index 18f1b135b..039e38e32 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -898,10 +898,10 @@ class Query < ActiveRecord::Base def project_statement project_clauses = [] - active_subprojects_ids = [] + subprojects_ids = [] - active_subprojects_ids = project.descendants.active.map(&:id) if project - if active_subprojects_ids.any? + subprojects_ids = project.descendants.where.not(status: Project::STATUS_ARCHIVED).ids if project + if subprojects_ids.any? if has_filter?("subproject_id") case operator_for("subproject_id") when '=' @@ -910,7 +910,7 @@ class Query < ActiveRecord::Base project_clauses << "#{Project.table_name}.id IN (%s)" % ids.join(',') when '!' # exclude the selected subprojects - ids = [project.id] + active_subprojects_ids - values_for("subproject_id").map(&:to_i) + ids = [project.id] + subprojects_ids - values_for("subproject_id").map(&:to_i) project_clauses << "#{Project.table_name}.id IN (%s)" % ids.join(',') when '!*' # main project only diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 848b2eaa2..ab4b9997c 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -119,6 +119,25 @@ class IssuesControllerTest < Redmine::ControllerTest end end + def test_index_should_list_issues_of_closed_subprojects + @request.session[:user_id] = 1 + project = Project.find(1) + + with_settings :display_subprojects_issues => '1' do + # One of subprojects is closed + Project.find_by(:identifier => 'subproject1').close + get(:index, :params => {:project_id => project.id}) + assert_response :success + assert_equal 10, issues_in_list.count + + # All subprojects are closed + project.descendants.each(&:close) + get(:index, :params => {:project_id => project.id}) + assert_response :success + assert_equal 10, issues_in_list.count + end + end + def test_index_with_project_and_subprojects_should_show_private_subprojects_with_permission @request.session[:user_id] = 2 with_settings :display_subprojects_issues => '1' do diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 70141a87e..a6dff724c 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -2503,6 +2503,17 @@ class QueryTest < ActiveSupport::TestCase ActiveRecord::Base.default_timezone = :local # restore Redmine default end + def test_project_statement_with_closed_subprojects + project = Project.find(1) + project.descendants.each(&:close) + + with_settings :display_subprojects_issues => '1' do + query = IssueQuery.new(:name => '_', :project => project) + statement = query.project_statement + assert_equal "projects.lft >= #{project.lft} AND projects.rgt <= #{project.rgt}", statement + end + end + def test_filter_on_subprojects query = IssueQuery.new(:name => '_', :project => Project.find(1)) filter_name = "subproject_id" -- 2.39.5