From 66c988a24edfafb10e930f3b9e91653b7b6f3f8d Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Tue, 29 Dec 2020 06:57:06 +0000 Subject: [PATCH] Merged r20693 from trunk to 4.1-stable (#34297). git-svn-id: http://svn.redmine.org/redmine/branches/4.1-stable@20695 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 854aeb62b..a57cfe442 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -871,10 +871,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 '=' @@ -883,7 +883,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 9222d8280..a6ed60b26 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -124,6 +124,25 @@ class IssuesControllerTest < Redmine::ControllerTest assert_select 'a[href="/issues/6"]', 0 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 Setting.display_subprojects_issues = 1 diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index dee450718..fcb554ecf 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -2401,6 +2401,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