forked from CGM_Public/pretix_original
API: Allow to run exporter without events
This commit is contained in:
@@ -93,7 +93,7 @@ class JobRunSerializer(serializers.Serializer):
|
||||
if events is not None and not isinstance(ex, OrganizerLevelExportMixin):
|
||||
self.fields["events"] = serializers.SlugRelatedField(
|
||||
queryset=events,
|
||||
required=True,
|
||||
required=False,
|
||||
allow_empty=False,
|
||||
slug_field='slug',
|
||||
many=True
|
||||
@@ -156,8 +156,9 @@ class JobRunSerializer(serializers.Serializer):
|
||||
def to_internal_value(self, data):
|
||||
if isinstance(data, QueryDict):
|
||||
data = data.copy()
|
||||
|
||||
for k, v in self.fields.items():
|
||||
if isinstance(v, serializers.ManyRelatedField) and k not in data:
|
||||
if isinstance(v, serializers.ManyRelatedField) and k not in data and k != "events":
|
||||
data[k] = []
|
||||
|
||||
for fk in self.fields.keys():
|
||||
|
||||
@@ -102,7 +102,7 @@ def test_org_list(token_client, organizer, event):
|
||||
c = copy.deepcopy(SAMPLE_EXPORTER_CONFIG)
|
||||
c['input_parameters'].insert(0, {
|
||||
"name": "events",
|
||||
"required": True
|
||||
"required": False
|
||||
})
|
||||
resp = token_client.get('/api/v1/organizers/{}/exporters/'.format(organizer.slug))
|
||||
assert resp.status_code == 200
|
||||
@@ -131,6 +131,12 @@ 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 == 202
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={
|
||||
'_format': 'xlsx',
|
||||
'events': []
|
||||
}, format='json')
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"events": ["This list may not be empty."]}
|
||||
|
||||
@@ -158,6 +164,41 @@ def test_org_validate_events(token_client, organizer, team, event):
|
||||
assert resp.data == {"events": [f"Object with slug={event.slug} does not exist."]}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_org_run_limit_events(token_client, organizer, team, event, event2):
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/eventdata/run/'.format(organizer.slug), data={
|
||||
'_format': 'default',
|
||||
}, 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.getvalue().strip().count(b"\n") == 2
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/eventdata/run/'.format(organizer.slug), data={
|
||||
'_format': 'default',
|
||||
'events': [event.slug],
|
||||
}, 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.getvalue().strip().count(b"\n") == 1
|
||||
|
||||
team.all_events = False
|
||||
team.limit_events.add(event)
|
||||
team.save()
|
||||
|
||||
resp = token_client.post('/api/v1/organizers/{}/exporters/eventdata/run/'.format(organizer.slug), data={
|
||||
'_format': 'default',
|
||||
}, 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.getvalue().strip().count(b"\n") == 1
|
||||
|
||||
|
||||
@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={
|
||||
|
||||
Reference in New Issue
Block a user