@@ -131,6 +131,7 class User < Principal | |||
|
131 | 131 | def reload(*args) |
|
132 | 132 | @name = nil |
|
133 | 133 | @projects_by_role = nil |
|
134 | @membership_by_project_id = nil | |
|
134 | 135 | super |
|
135 | 136 | end |
|
136 | 137 | |
@@ -415,6 +416,17 class User < Principal | |||
|
415 | 416 | !logged? |
|
416 | 417 | end |
|
417 | 418 | |
|
419 | # Returns user's membership for the given project | |
|
420 | # or nil if the user is not a member of project | |
|
421 | def membership(project) | |
|
422 | project_id = project.is_a?(Project) ? project.id : project | |
|
423 | ||
|
424 | @membership_by_project_id ||= Hash.new {|h, project_id| | |
|
425 | h[project_id] = memberships.where(:project_id => project_id).first | |
|
426 | } | |
|
427 | @membership_by_project_id[project_id] | |
|
428 | end | |
|
429 | ||
|
418 | 430 | # Return user's roles for project |
|
419 | 431 | def roles_for_project(project) |
|
420 | 432 | roles = [] |
@@ -422,7 +434,7 class User < Principal | |||
|
422 | 434 | return roles if project.nil? || project.archived? |
|
423 | 435 | if logged? |
|
424 | 436 | # Find project membership |
|
425 |
membership = membership |
|
|
437 | membership = membership(project) | |
|
426 | 438 | if membership |
|
427 | 439 | roles = membership.roles |
|
428 | 440 | else |
@@ -727,6 +727,32 class UserTest < ActiveSupport::TestCase | |||
|
727 | 727 | assert_equal true, User.default_admin_account_changed? |
|
728 | 728 | end |
|
729 | 729 | |
|
730 | def test_membership_with_project_should_return_membership | |
|
731 | project = Project.find(1) | |
|
732 | ||
|
733 | membership = @jsmith.membership(project) | |
|
734 | assert_kind_of Member, membership | |
|
735 | assert_equal @jsmith, membership.user | |
|
736 | assert_equal project, membership.project | |
|
737 | end | |
|
738 | ||
|
739 | def test_membership_with_project_id_should_return_membership | |
|
740 | project = Project.find(1) | |
|
741 | ||
|
742 | membership = @jsmith.membership(1) | |
|
743 | assert_kind_of Member, membership | |
|
744 | assert_equal @jsmith, membership.user | |
|
745 | assert_equal project, membership.project | |
|
746 | end | |
|
747 | ||
|
748 | def test_membership_for_non_member_should_return_nil | |
|
749 | project = Project.find(1) | |
|
750 | ||
|
751 | user = User.generate! | |
|
752 | membership = user.membership(1) | |
|
753 | assert_nil membership | |
|
754 | end | |
|
755 | ||
|
730 | 756 | def test_roles_for_project |
|
731 | 757 | # user with a role |
|
732 | 758 | roles = @jsmith.roles_for_project(Project.find(1)) |
General Comments 0
You need to be logged in to leave comments.
Login now