mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
134
src/tests/api/test_exporters.py
Normal file
134
src/tests/api/test_exporters.py
Normal file
@@ -0,0 +1,134 @@
|
||||
import copy
|
||||
import uuid
|
||||
|
||||
import pytest
|
||||
|
||||
from pretix.base.models import CachedFile
|
||||
|
||||
SAMPLE_EXPORTER_CONFIG = {
|
||||
"identifier": "orderlist",
|
||||
"verbose_name": "Order data",
|
||||
"input_parameters": [
|
||||
{
|
||||
"name": "_format",
|
||||
"required": True,
|
||||
"choices": [
|
||||
"xlsx",
|
||||
"orders:default",
|
||||
"orders:excel",
|
||||
"orders:semicolon",
|
||||
"positions:default",
|
||||
"positions:excel",
|
||||
"positions:semicolon",
|
||||
"fees:default",
|
||||
"fees:excel",
|
||||
"fees:semicolon"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "paid_only",
|
||||
"required": False
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_event_list(token_client, organizer, event):
|
||||
c = copy.deepcopy(SAMPLE_EXPORTER_CONFIG)
|
||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/exporters/'.format(organizer.slug, event.slug))
|
||||
assert resp.status_code == 200
|
||||
assert c in resp.data['results']
|
||||
|
||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/exporters/orderlist/'.format(organizer.slug, event.slug))
|
||||
assert resp.status_code == 200
|
||||
assert c == resp.data
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_org_list(token_client, organizer, event):
|
||||
c = copy.deepcopy(SAMPLE_EXPORTER_CONFIG)
|
||||
c['input_parameters'].insert(0, {
|
||||
"name": "events",
|
||||
"required": True
|
||||
})
|
||||
resp = token_client.get('/api/v1/organizers/{}/exporters/'.format(organizer.slug))
|
||||
assert resp.status_code == 200
|
||||
print(resp.data['results'])
|
||||
assert c in resp.data['results']
|
||||
resp = token_client.get('/api/v1/organizers/{}/exporters/orderlist/'.format(organizer.slug, event.slug))
|
||||
assert resp.status_code == 200
|
||||
assert c == resp.data
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_event_validate(token_client, organizer, team, event):
|
||||
resp = token_client.post('/api/v1/organizers/{}/events/{}/exporters/orderlist/run/'.format(organizer.slug, event.slug), data={
|
||||
}, format='json')
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"_format": ["This field is required."]}
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/events/{}/exporters/orderlist/run/'.format(organizer.slug, event.slug), data={
|
||||
'_format': 'FOOBAR',
|
||||
}, format='json')
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"_format": ["\"FOOBAR\" is not a valid choice."]}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_org_validate_events(token_client, organizer, team, event):
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={
|
||||
'_format': 'xlsx',
|
||||
}, format='json')
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"events": ["This field is required."]}
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={
|
||||
'_format': 'xlsx',
|
||||
'events': ["nonexisting"]
|
||||
}, format='json')
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"events": ["Object with slug=nonexisting does not exist."]}
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={
|
||||
'events': [event.slug],
|
||||
'_format': 'xlsx'
|
||||
}, format='json')
|
||||
assert resp.status_code == 202
|
||||
|
||||
team.all_events = False
|
||||
team.save()
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={
|
||||
'_format': 'xlsx',
|
||||
'events': [event.slug]
|
||||
}, format='json')
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"events": [f"Object with slug={event.slug} does not exist."]}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_run_success(token_client, organizer, team, event):
|
||||
resp = token_client.post('/api/v1/organizers/{}/events/{}/exporters/orderlist/run/'.format(organizer.slug, event.slug), data={
|
||||
'_format': 'xlsx',
|
||||
}, format='json')
|
||||
assert resp.status_code == 202
|
||||
assert "download" in resp.data
|
||||
resp = token_client.get("/" + resp.data["download"].split("/", 3)[3])
|
||||
assert resp.status_code == 200
|
||||
assert resp["Content-Type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_download_nonexisting(token_client, organizer, team, event):
|
||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/exporters/orderlist/download/{}/{}/'.format(
|
||||
organizer.slug, event.slug, uuid.uuid4(), uuid.uuid4()
|
||||
))
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_gone_without_celery(token_client, organizer, team, event):
|
||||
cf = CachedFile.objects.create()
|
||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/exporters/orderlist/download/{}/{}/'.format(organizer.slug, event.slug, uuid.uuid4(), cf.id))
|
||||
assert resp.status_code == 410
|
||||
@@ -132,6 +132,8 @@ event_permission_sub_urls = [
|
||||
('get', 'can_view_orders', 'cartpositions/1/', 404),
|
||||
('post', 'can_change_orders', 'cartpositions/', 400),
|
||||
('delete', 'can_change_orders', 'cartpositions/1/', 404),
|
||||
('post', 'can_view_orders', 'exporters/invoicedata/run/', 400),
|
||||
('get', 'can_view_orders', 'exporters/invoicedata/download/bc3f9884-26ee-425b-8636-80613f84b6fa/3cb49ae6-eda3-4605-814e-099e23777b36/', 404),
|
||||
]
|
||||
|
||||
org_permission_sub_urls = [
|
||||
|
||||
Reference in New Issue
Block a user