def reload(*args)
@name = nil
@projects_by_role = nil
+ @membership_by_project_id = nil
super
end
!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 = []
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
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))