From: Jean-Philippe Lang Date: Fri, 1 Mar 2013 16:22:02 +0000 (+0000) Subject: Merged r11508 from trunk (#13301). X-Git-Tag: 2.3.0~51 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=33ef9fbe298d48f28e44689ee3854c8c273912a2;p=redmine.git Merged r11508 from trunk (#13301). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.3-stable@11516 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/user.rb b/app/models/user.rb index 3670ad2a1..81c74e52a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -131,6 +131,7 @@ class User < Principal def reload(*args) @name = nil @projects_by_role = nil + @membership_by_project_id = nil super end @@ -415,6 +416,17 @@ class User < Principal !logged? end + # Returns user's membership for the given project + # or nil if the user is not a member of project + def membership(project) + project_id = project.is_a?(Project) ? project.id : project + + @membership_by_project_id ||= Hash.new {|h, project_id| + h[project_id] = memberships.where(:project_id => project_id).first + } + @membership_by_project_id[project_id] + end + # Return user's roles for project def roles_for_project(project) roles = [] @@ -422,7 +434,7 @@ class User < Principal return roles if project.nil? || project.archived? if logged? # Find project membership - membership = memberships.detect {|m| m.project_id == project.id} + membership = membership(project) if membership roles = membership.roles else diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 28d09518e..18a637037 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -727,6 +727,32 @@ class UserTest < ActiveSupport::TestCase assert_equal true, User.default_admin_account_changed? end + def test_membership_with_project_should_return_membership + project = Project.find(1) + + membership = @jsmith.membership(project) + assert_kind_of Member, membership + assert_equal @jsmith, membership.user + assert_equal project, membership.project + end + + def test_membership_with_project_id_should_return_membership + project = Project.find(1) + + membership = @jsmith.membership(1) + assert_kind_of Member, membership + assert_equal @jsmith, membership.user + assert_equal project, membership.project + end + + def test_membership_for_non_member_should_return_nil + project = Project.find(1) + + user = User.generate! + membership = user.membership(1) + assert_nil membership + end + def test_roles_for_project # user with a role roles = @jsmith.roles_for_project(Project.find(1))