summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/query.rb8
-rw-r--r--test/functional/issues_controller_test.rb19
-rw-r--r--test/unit/query_test.rb11
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"