diff --git a/app/models/principal.rb b/app/models/principal.rb old mode 100644 new mode 100755 index 324a742..516050c --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -89,7 +89,9 @@ class Principal < ActiveRecord::Base where("1=0") else ids = projects.map(&:id) - active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) + # include active and locked users + where(:status => [STATUS_LOCKED, STATUS_ACTIVE]). + where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) end } # Principals that are not members of projects diff --git a/app/models/query.rb b/app/models/query.rb old mode 100644 new mode 100755 index 863bdbc..dfef3f9 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -509,7 +509,7 @@ class Query < ActiveRecord::Base @principal ||= begin principals = [] if project - principals += project.principals.visible + principals += Principal.member_of(project).visible unless project.leaf? principals += Principal.member_of(project.descendants.visible).visible end diff --git a/test/unit/principal_test.rb b/test/unit/principal_test.rb old mode 100644 new mode 100755 index e3366e3..337efb2 --- a/test/unit/principal_test.rb +++ b/test/unit/principal_test.rb @@ -52,11 +52,11 @@ class PrincipalTest < ActiveSupport::TestCase assert_equal expected.map(&:id).sort, Principal.visible(user).pluck(:id).sort end - def test_member_of_scope_should_return_the_union_of_all_members + def test_member_of_scope_should_return_the_union_of_all_active_and_locked_members projects = Project.find([1]) - assert_equal [3, 2], Principal.member_of(projects).sort.map(&:id) + assert_equal [3, 5, 2], Principal.member_of(projects).sort.map(&:id) projects = Project.find([1, 2]) - assert_equal [3, 2, 8, 11], Principal.member_of(projects).sort.map(&:id) + assert_equal [3, 5, 2, 8, 11], Principal.member_of(projects).sort.map(&:id) end def test_member_of_scope_should_be_empty_for_no_projects