diff --git a/src/tests/control/test_devices.py b/src/tests/control/test_devices.py new file mode 100644 index 0000000000..70b301f57a --- /dev/null +++ b/src/tests/control/test_devices.py @@ -0,0 +1,83 @@ +import pytest +from django.utils.timezone import now + +from pretix.base.models import Device, Event, Organizer, Team, User +from pretix.base.models.devices import generate_api_token + + +@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 device(organizer): + return organizer.devices.create(name='Cashdesk') + + +@pytest.fixture +def admin_user(admin_team): + u = User.objects.create_user('dummy@dummy.dummy', 'dummy') + admin_team.members.add(u) + return u + + +@pytest.fixture +def admin_team(organizer): + return Team.objects.create(organizer=organizer, can_change_organizer_settings=True, name='Admin team') + + +@pytest.mark.django_db +def test_list_of_devices(event, admin_user, client, device): + client.login(email='dummy@dummy.dummy', password='dummy') + resp = client.get('/control/organizer/dummy/devices') + assert 'Cashdesk' in resp.rendered_content + + +@pytest.mark.django_db +def test_create_device(event, admin_user, admin_team, client): + client.login(email='dummy@dummy.dummy', password='dummy') + resp = client.post('/control/organizer/dummy/device/add', { + 'name': 'Foo', + 'limit_events': str(event.pk), + }, follow=True) + d = Device.objects.last() + assert d.name == 'Foo' + assert not d.all_events + assert list(d.limit_events.all()) == [event] + assert d.initialization_token in resp.content.decode() + + +@pytest.mark.django_db +def test_update_device(event, admin_user, admin_team, device, client): + client.login(email='dummy@dummy.dummy', password='dummy') + client.post('/control/organizer/dummy/device/{}/edit'.format(device.pk), { + 'name': 'Cashdesk 2', + 'limit_events': str(event.pk), + }, follow=True) + device.refresh_from_db() + assert device.name == 'Cashdesk 2' + assert not device.all_events + assert list(device.limit_events.all()) == [event] + + +@pytest.mark.django_db +def test_revoke_device(event, admin_user, admin_team, device, client): + client.login(email='dummy@dummy.dummy', password='dummy') + device.api_token = generate_api_token() + device.initialized = now() + device.save() + + client.get('/control/organizer/dummy/device/{}/revoke'.format(device.pk)) + client.post('/control/organizer/dummy/device/{}/revoke'.format(device.pk), {}, follow=True) + device.refresh_from_db() + assert device.api_token is None diff --git a/src/tests/control/test_permissions.py b/src/tests/control/test_permissions.py index f99d9524c1..7e58a61ffa 100644 --- a/src/tests/control/test_permissions.py +++ b/src/tests/control/test_permissions.py @@ -131,6 +131,11 @@ organizer_urls = [ 'organizer/abc/team/1/edit', 'organizer/abc/team/1/delete', 'organizer/abc/team/add', + 'organizer/abc/devices', + 'organizer/abc/device/add', + 'organizer/abc/device/1/edit', + 'organizer/abc/device/1/connect', + 'organizer/abc/device/1/revoke', ] diff --git a/src/tests/control/test_views.py b/src/tests/control/test_views.py index 4658af6845..93d2ca7b78 100644 --- a/src/tests/control/test_views.py +++ b/src/tests/control/test_views.py @@ -98,6 +98,8 @@ def logged_in_client(client, event): ('/control/organizers/', 200), ('/control/organizers/add', 200), ('/control/organizer/{orga}/edit', 200), + ('/control/organizer/{orga}/teams', 200), + ('/control/organizer/{orga}/devices', 200), ('/control/events/', 200), ('/control/events/add', 200),