From 171581da7e5301470d72efc91e713c375290d7b8 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 7 Feb 2014 08:36:49 +0000 Subject: [PATCH] Project.activities should always return a ActiveRecord::Relation (#15983). git-svn-id: http://svn.redmine.org/redmine/trunk@12854 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/project.rb | 16 ++++++++-------- test/unit/project_test.rb | 2 ++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 3f3e216f9..a25513baf 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -995,15 +995,15 @@ class Project < ActiveRecord::Base # Returns the systemwide active activities merged with the project specific overrides def system_activities_and_project_overrides(include_inactive=false) - if include_inactive - return TimeEntryActivity.shared. - where("id NOT IN (?)", self.time_entry_activities.collect(&:parent_id)).all + - self.time_entry_activities - else - return TimeEntryActivity.shared.active. - where("id NOT IN (?)", self.time_entry_activities.collect(&:parent_id)).all + - self.time_entry_activities.active + t = TimeEntryActivity.table_name + scope = TimeEntryActivity.where( + "(#{t}.project_id IS NULL AND #{t}.id NOT IN (?)) OR (#{t}.project_id = ?)", + time_entry_activities.map(&:parent_id), id + ) + unless include_inactive + scope = scope.active end + scope end # Archives subprojects recursively diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 7a2817d17..0dc3a54f1 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -730,6 +730,7 @@ class ProjectTest < ActiveSupport::TestCase def test_activities_should_use_the_system_activities project = Project.find(1) assert_equal project.activities, TimeEntryActivity.where(:active => true).all + assert_kind_of ActiveRecord::Relation, project.activities end @@ -739,6 +740,7 @@ class ProjectTest < ActiveSupport::TestCase assert overridden_activity.save! assert project.activities.include?(overridden_activity), "Project specific Activity not found" + assert_kind_of ActiveRecord::Relation, project.activities end def test_activities_should_not_include_the_inactive_project_specific_activities