@@ -132,6 +132,7 class User < Principal | |||||
132 | def reload(*args) |
|
132 | def reload(*args) | |
133 | @name = nil |
|
133 | @name = nil | |
134 | @projects_by_role = nil |
|
134 | @projects_by_role = nil | |
|
135 | @membership_by_project_id = nil | |||
135 | base_reload(*args) |
|
136 | base_reload(*args) | |
136 | end |
|
137 | end | |
137 |
|
138 | |||
@@ -419,6 +420,17 class User < Principal | |||||
419 | !logged? |
|
420 | !logged? | |
420 | end |
|
421 | end | |
421 |
|
422 | |||
|
423 | # Returns user's membership for the given project | |||
|
424 | # or nil if the user is not a member of project | |||
|
425 | def membership(project) | |||
|
426 | project_id = project.is_a?(Project) ? project.id : project | |||
|
427 | ||||
|
428 | @membership_by_project_id ||= Hash.new {|h, project_id| | |||
|
429 | h[project_id] = memberships.where(:project_id => project_id).first | |||
|
430 | } | |||
|
431 | @membership_by_project_id[project_id] | |||
|
432 | end | |||
|
433 | ||||
422 | # Return user's roles for project |
|
434 | # Return user's roles for project | |
423 | def roles_for_project(project) |
|
435 | def roles_for_project(project) | |
424 | roles = [] |
|
436 | roles = [] | |
@@ -426,7 +438,7 class User < Principal | |||||
426 | return roles if project.nil? || project.archived? |
|
438 | return roles if project.nil? || project.archived? | |
427 | if logged? |
|
439 | if logged? | |
428 | # Find project membership |
|
440 | # Find project membership | |
429 |
membership = membership |
|
441 | membership = membership(project) | |
430 | if membership |
|
442 | if membership | |
431 | roles = membership.roles |
|
443 | roles = membership.roles | |
432 | else |
|
444 | else |
@@ -762,6 +762,32 class UserTest < ActiveSupport::TestCase | |||||
762 | assert_equal true, User.default_admin_account_changed? |
|
762 | assert_equal true, User.default_admin_account_changed? | |
763 | end |
|
763 | end | |
764 |
|
764 | |||
|
765 | def test_membership_with_project_should_return_membership | |||
|
766 | project = Project.find(1) | |||
|
767 | ||||
|
768 | membership = @jsmith.membership(project) | |||
|
769 | assert_kind_of Member, membership | |||
|
770 | assert_equal @jsmith, membership.user | |||
|
771 | assert_equal project, membership.project | |||
|
772 | end | |||
|
773 | ||||
|
774 | def test_membership_with_project_id_should_return_membership | |||
|
775 | project = Project.find(1) | |||
|
776 | ||||
|
777 | membership = @jsmith.membership(1) | |||
|
778 | assert_kind_of Member, membership | |||
|
779 | assert_equal @jsmith, membership.user | |||
|
780 | assert_equal project, membership.project | |||
|
781 | end | |||
|
782 | ||||
|
783 | def test_membership_for_non_member_should_return_nil | |||
|
784 | project = Project.find(1) | |||
|
785 | ||||
|
786 | user = User.generate! | |||
|
787 | membership = user.membership(1) | |||
|
788 | assert_nil membership | |||
|
789 | end | |||
|
790 | ||||
765 | def test_roles_for_project |
|
791 | def test_roles_for_project | |
766 | # user with a role |
|
792 | # user with a role | |
767 | roles = @jsmith.roles_for_project(Project.find(1)) |
|
793 | roles = @jsmith.roles_for_project(Project.find(1)) |
General Comments 0
You need to be logged in to leave comments.
Login now