mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
* New models * CRUD UI * UI for adding/removing team members * Log display for teams * Fix invitations, move frontend * Drop old models (incomplete) * Drop more old stuff * Drop even more old stuff * Fix tests * Fix permission test * flake8 fix * Add tests fore the new code * Rebase migrations
This commit is contained in:
237
src/tests/base/test_permissions.py
Normal file
237
src/tests/base/test_permissions.py
Normal file
@@ -0,0 +1,237 @@
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
|
||||
from pretix.base.models import Event, Organizer, Team, User
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def organizer():
|
||||
return Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def event(organizer):
|
||||
event = Event.objects.create(
|
||||
organizer=organizer, name='Dummy', slug='dummy',
|
||||
date_from=now()
|
||||
)
|
||||
return event
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def user():
|
||||
return User.objects.create_user('dummy@dummy.dummy', 'dummy')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_invalid_permission(event, user):
|
||||
team = Team.objects.create(organizer=event.organizer)
|
||||
with pytest.raises(ValueError):
|
||||
team.has_permission('FOOOOOOBAR')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_any_event_permission_limited(event, user):
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event)
|
||||
|
||||
team = Team.objects.create(organizer=event.organizer)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event)
|
||||
|
||||
team.members.add(user)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event)
|
||||
assert not team.permission_for_event(event)
|
||||
|
||||
team.limit_events.add(event)
|
||||
user._teamcache = {}
|
||||
assert team.permission_for_event(event)
|
||||
assert user.has_event_permisson(event.organizer, event)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_any_event_permission_all(event, user):
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event)
|
||||
|
||||
team = Team.objects.create(organizer=event.organizer)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event)
|
||||
|
||||
team.members.add(user)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event)
|
||||
assert not team.permission_for_event(event)
|
||||
|
||||
team.all_events = True
|
||||
team.save()
|
||||
user._teamcache = {}
|
||||
assert team.permission_for_event(event)
|
||||
assert user.has_event_permisson(event.organizer, event)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_specific_event_permission_limited(event, user):
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team = Team.objects.create(organizer=event.organizer, can_change_orders=True)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team.members.add(user)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team.limit_events.add(event)
|
||||
user._teamcache = {}
|
||||
assert user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_event_settings')
|
||||
|
||||
team.can_change_orders = False
|
||||
team.save()
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_specific_event_permission_all(event, user):
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team = Team.objects.create(organizer=event.organizer, can_change_orders=True)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team.members.add(user)
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team.all_events = True
|
||||
team.save()
|
||||
user._teamcache = {}
|
||||
assert user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
team.can_change_orders = False
|
||||
team.save()
|
||||
user._teamcache = {}
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_event_permissions_multiple_teams(event, user):
|
||||
team1 = Team.objects.create(organizer=event.organizer, can_change_orders=True, all_events=True)
|
||||
team2 = Team.objects.create(organizer=event.organizer, can_change_vouchers=True)
|
||||
team3 = Team.objects.create(organizer=event.organizer, can_change_event_settings=True)
|
||||
event2 = Event.objects.create(
|
||||
organizer=event.organizer, name='Dummy', slug='dummy',
|
||||
date_from=now()
|
||||
)
|
||||
team1.members.add(user)
|
||||
team2.members.add(user)
|
||||
team3.members.add(user)
|
||||
team2.limit_events.add(event)
|
||||
team3.limit_events.add(event2)
|
||||
|
||||
assert user.has_event_permisson(event.organizer, event, 'can_change_orders')
|
||||
assert user.has_event_permisson(event.organizer, event, 'can_change_vouchers')
|
||||
assert not user.has_event_permisson(event.organizer, event, 'can_change_event_settings')
|
||||
assert user.get_event_permission_set(event.organizer, event) == {'can_change_orders', 'can_change_vouchers'}
|
||||
assert user.get_event_permission_set(event.organizer, event2) == {'can_change_orders', 'can_change_event_settings',
|
||||
'can_change_settings'}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_any_organizer_permission(event, user):
|
||||
user._teamcache = {}
|
||||
assert not user.has_organizer_permisson(event.organizer)
|
||||
|
||||
team = Team.objects.create(organizer=event.organizer)
|
||||
user._teamcache = {}
|
||||
assert not user.has_organizer_permisson(event.organizer)
|
||||
|
||||
team.members.add(user)
|
||||
user._teamcache = {}
|
||||
assert user.has_organizer_permisson(event.organizer)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_specific_organizer_permission(event, user):
|
||||
user._teamcache = {}
|
||||
assert not user.has_organizer_permisson(event.organizer, 'can_create_events')
|
||||
|
||||
team = Team.objects.create(organizer=event.organizer, can_create_events=True)
|
||||
user._teamcache = {}
|
||||
assert not user.has_organizer_permisson(event.organizer, 'can_create_events')
|
||||
|
||||
team.members.add(user)
|
||||
user._teamcache = {}
|
||||
assert user.has_organizer_permisson(event.organizer, 'can_create_events')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_organizer_permissions_multiple_teams(event, user):
|
||||
team1 = Team.objects.create(organizer=event.organizer, can_change_organizer_settings=True)
|
||||
team2 = Team.objects.create(organizer=event.organizer, can_create_events=True)
|
||||
team1.members.add(user)
|
||||
team2.members.add(user)
|
||||
orga2 = Organizer.objects.create(slug='d2', name='d2')
|
||||
team3 = Team.objects.create(organizer=orga2, can_change_teams=True)
|
||||
team3.members.add(user)
|
||||
|
||||
assert user.has_organizer_permisson(event.organizer, 'can_create_events')
|
||||
assert user.has_organizer_permisson(event.organizer, 'can_change_organizer_settings')
|
||||
assert not user.has_organizer_permisson(event.organizer, 'can_change_teams')
|
||||
assert user.get_organizer_permission_set(event.organizer) == {'can_create_events', 'can_change_organizer_settings'}
|
||||
assert user.get_organizer_permission_set(orga2) == {'can_change_teams'}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_superuser(event, user):
|
||||
user.is_superuser = True
|
||||
user.save()
|
||||
|
||||
assert user.has_organizer_permisson(event.organizer)
|
||||
assert user.has_organizer_permisson(event.organizer, 'can_create_events')
|
||||
assert user.has_event_permisson(event.organizer, event)
|
||||
assert user.has_event_permisson(event.organizer, event, 'can_change_event_settings')
|
||||
|
||||
assert 'arbitrary' in user.get_event_permission_set(event.organizer, event)
|
||||
assert 'arbitrary' in user.get_organizer_permission_set(event.organizer)
|
||||
|
||||
assert event in user.get_events_with_any_permission()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_list_of_events(event, user):
|
||||
orga2 = Organizer.objects.create(slug='d2', name='d2')
|
||||
event2 = Event.objects.create(
|
||||
organizer=event.organizer, name='Dummy', slug='dummy2',
|
||||
date_from=now()
|
||||
)
|
||||
event3 = Event.objects.create(
|
||||
organizer=orga2, name='Dummy', slug='dummy3',
|
||||
date_from=now()
|
||||
)
|
||||
event4 = Event.objects.create(
|
||||
organizer=orga2, name='Dummy', slug='dummy4',
|
||||
date_from=now()
|
||||
)
|
||||
|
||||
assert not user.get_events_with_any_permission()
|
||||
|
||||
team1 = Team.objects.create(organizer=event.organizer, can_change_orders=True, all_events=True)
|
||||
team2 = Team.objects.create(organizer=event.organizer, can_change_vouchers=True)
|
||||
team3 = Team.objects.create(organizer=event.organizer, can_change_event_settings=True)
|
||||
team1.members.add(user)
|
||||
team2.members.add(user)
|
||||
team3.members.add(user)
|
||||
team2.limit_events.add(event)
|
||||
team3.limit_events.add(event3)
|
||||
|
||||
events = list(user.get_events_with_any_permission())
|
||||
assert event in events
|
||||
assert event2 in events
|
||||
assert event3 in events
|
||||
assert event4 not in events
|
||||
Reference in New Issue
Block a user