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 '='
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
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
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"