intent/tests/test_access.py

42 lines
1.4 KiB
Python
Raw Normal View History

from django.contrib.auth.models import AnonymousUser
from intent.access import org_access
from intent.orgs.models import OrgMembership
def test_owner_access(owner, org):
access = org_access(owner, org)
assert access.is_owner
assert access.can_view_members
assert access.can_manage_members
assert access.can_create_projects
def test_collaborator_access(collaborator, org):
access = org_access(collaborator, org)
assert access.is_member
assert not access.is_owner
assert access.can_view_members
assert not access.can_manage_members
assert not access.can_create_projects
def test_collaborator_with_grant_can_create_projects(collaborator, org):
OrgMembership.objects.filter(user=collaborator).update(can_create_projects=True)
assert org_access(collaborator, org).can_create_projects
def test_outsiders_have_no_access(make_user, org):
for user in [AnonymousUser(), make_user()]:
access = org_access(user, org)
assert not access.is_member
assert not access.can_view_members
assert not access.can_create_projects
def test_staff_never_have_access_even_with_a_membership_row(make_user, org):
admin = make_user(is_staff=True)
# Bypasses the service checks to prove access.py doesn't rely on them alone.
OrgMembership.objects.create(org=org, user=admin, role="owner")
assert not org_access(admin, org).is_member