@@ -131,6 +131,7 class User < Principal | |||||
131 | def reload(*args) |
|
131 | def reload(*args) | |
132 | @name = nil |
|
132 | @name = nil | |
133 | @projects_by_role = nil |
|
133 | @projects_by_role = nil | |
|
134 | @membership_by_project_id = nil | |||
134 | super |
|
135 | super | |
135 | end |
|
136 | end | |
136 |
|
137 | |||
@@ -415,6 +416,17 class User < Principal | |||||
415 | !logged? |
|
416 | !logged? | |
416 | end |
|
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 | # Return user's roles for project |
|
430 | # Return user's roles for project | |
419 | def roles_for_project(project) |
|
431 | def roles_for_project(project) | |
420 | roles = [] |
|
432 | roles = [] | |
@@ -422,7 +434,7 class User < Principal | |||||
422 | return roles if project.nil? || project.archived? |
|
434 | return roles if project.nil? || project.archived? | |
423 | if logged? |
|
435 | if logged? | |
424 | # Find project membership |
|
436 | # Find project membership | |
425 |
membership = membership |
|
437 | membership = membership(project) | |
426 | if membership |
|
438 | if membership | |
427 | roles = membership.roles |
|
439 | roles = membership.roles | |
428 | else |
|
440 | else |
@@ -727,6 +727,32 class UserTest < ActiveSupport::TestCase | |||||
727 | assert_equal true, User.default_admin_account_changed? |
|
727 | assert_equal true, User.default_admin_account_changed? | |
728 | end |
|
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 | def test_roles_for_project |
|
756 | def test_roles_for_project | |
731 | # user with a role |
|
757 | # user with a role | |
732 | roles = @jsmith.roles_for_project(Project.find(1)) |
|
758 | roles = @jsmith.roles_for_project(Project.find(1)) |
General Comments 0
You need to be logged in to leave comments.
Login now