@@ -132,6 +132,7 class User < Principal | |||
|
132 | 132 | def reload(*args) |
|
133 | 133 | @name = nil |
|
134 | 134 | @projects_by_role = nil |
|
135 | @membership_by_project_id = nil | |
|
135 | 136 | base_reload(*args) |
|
136 | 137 | end |
|
137 | 138 | |
@@ -419,6 +420,17 class User < Principal | |||
|
419 | 420 | !logged? |
|
420 | 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 | 434 | # Return user's roles for project |
|
423 | 435 | def roles_for_project(project) |
|
424 | 436 | roles = [] |
@@ -426,7 +438,7 class User < Principal | |||
|
426 | 438 | return roles if project.nil? || project.archived? |
|
427 | 439 | if logged? |
|
428 | 440 | # Find project membership |
|
429 |
membership = membership |
|
|
441 | membership = membership(project) | |
|
430 | 442 | if membership |
|
431 | 443 | roles = membership.roles |
|
432 | 444 | else |
@@ -762,6 +762,32 class UserTest < ActiveSupport::TestCase | |||
|
762 | 762 | assert_equal true, User.default_admin_account_changed? |
|
763 | 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 | 791 | def test_roles_for_project |
|
766 | 792 | # user with a role |
|
767 | 793 | roles = @jsmith.roles_for_project(Project.find(1)) |
General Comments 0
You need to be logged in to leave comments.
Login now