]> source.dussan.org Git - redmine.git/commitdiff
Merged r20693 from trunk to 4.1-stable (#34297).
authorGo MAEDA <maeda@farend.jp>
Tue, 29 Dec 2020 06:57:06 +0000 (06:57 +0000)
committerGo MAEDA <maeda@farend.jp>
Tue, 29 Dec 2020 06:57:06 +0000 (06:57 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/4.1-stable@20695 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/query.rb
test/functional/issues_controller_test.rb
test/unit/query_test.rb

index 854aeb62beebf7d4698b50a15abb4059697bc6bf..a57cfe442b04abba9f215bf7730bd4d2bcda4bcb 100644 (file)
@@ -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
index 9222d82801106f04ee3e8a7ee286c341c9262e0a..a6ed60b26813acbc315a20e061a3efa9fb466b7c 100644 (file)
@@ -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
index dee4507180c34d934b751768b326b8051aa50fb4..fcb554ecf0aa49ed7b34452d9c1c82e5b6f538f8 100644 (file)
@@ -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"