]> source.dussan.org Git - redmine.git/commitdiff
Subprojects issues are not displayed on main project when all subprojects are closed...
authorGo MAEDA <maeda@farend.jp>
Sun, 27 Dec 2020 06:46:37 +0000 (06:46 +0000)
committerGo MAEDA <maeda@farend.jp>
Sun, 27 Dec 2020 06:46:37 +0000 (06:46 +0000)
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
test/functional/issues_controller_test.rb
test/unit/query_test.rb

index 18f1b135bf4765fbdbdb3a7c02b4f40bee30c0a2..039e38e325adfeb558ac2f48693c033c47a323a2 100644 (file)
@@ -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
index 848b2eaa26bb62006ea98c5d0d7057699efde8e0..ab4b9997c917d5faa4daeee66b9adaa6c513e28e 100644 (file)
@@ -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
index 70141a87e48363957d23f31af12648d6e9585c8d..a6dff724c819ab7c44220d9ffd42bcec90587069 100644 (file)
@@ -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"