manager: check slugs on import (#45221)
This commit is contained in:
parent
6efa344ff6
commit
3f1ae0d037
|
@ -79,10 +79,16 @@ def clean_import_data(cls, data):
|
|||
cleaned_data = copy.deepcopy(data)
|
||||
for param in data:
|
||||
try:
|
||||
cls._meta.get_field(param)
|
||||
field = cls._meta.get_field(param)
|
||||
except FieldDoesNotExist:
|
||||
# remove unknown fields
|
||||
cleaned_data.pop(param)
|
||||
if param == 'slug':
|
||||
value = cleaned_data[param]
|
||||
try:
|
||||
field.run_validators(value)
|
||||
except ValidationError:
|
||||
raise AgendaImportError(_('Bad slug format "%s"') % value)
|
||||
return cleaned_data
|
||||
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import datetime
|
||||
from io import StringIO
|
||||
import json
|
||||
|
@ -376,3 +377,44 @@ def test_import_export_desk_unknown_fields(app, some_data, meetings_agenda):
|
|||
assert Desk.objects.exists() is True
|
||||
assert TimePeriod.objects.exists() is True
|
||||
assert TimePeriodException.objects.exists() is True
|
||||
|
||||
|
||||
def test_import_export_slug_fields(app):
|
||||
agenda_events = Agenda.objects.create(label='Events Agenda', kind='events')
|
||||
Event.objects.create(agenda=agenda_events, start_datetime=make_aware(datetime.datetime.now()), places=10)
|
||||
agenda_meetings = Agenda.objects.create(label='Meetings Agenda', kind='meetings')
|
||||
MeetingType.objects.create(agenda=agenda_meetings, label='Meeting Type', duration=30)
|
||||
Desk.objects.create(agenda=agenda_meetings, label='Desk')
|
||||
|
||||
output = get_output_of_command('export_site')
|
||||
original_payload = json.loads(output)
|
||||
|
||||
Agenda.objects.all().delete()
|
||||
assert Agenda.objects.exists() is False
|
||||
assert MeetingType.objects.exists() is False
|
||||
assert Desk.objects.exists() is False
|
||||
assert Event.objects.exists() is False
|
||||
|
||||
payload = copy.deepcopy(original_payload)
|
||||
payload['agendas'][0]['slug'] = 'events-agenda&'
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(payload)
|
||||
assert str(excinfo.value) == 'Bad slug format "events-agenda&"'
|
||||
|
||||
payload = copy.deepcopy(original_payload)
|
||||
payload['agendas'][0]['events'][0]['slug'] = 'events-agenda-event&'
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(payload)
|
||||
assert str(excinfo.value) == 'Bad slug format "events-agenda-event&"'
|
||||
|
||||
payload = copy.deepcopy(original_payload)
|
||||
payload['agendas'][1]['desks'][0]['slug'] = 'desk&'
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(payload)
|
||||
assert str(excinfo.value) == 'Bad slug format "desk&"'
|
||||
|
||||
payload = copy.deepcopy(original_payload)
|
||||
payload['agendas'][1]['meetingtypes'][0]['slug'] = 'meeting-type&'
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(payload)
|
||||
assert str(excinfo.value) == 'Bad slug format "meeting-type&"'
|
||||
|
|
Loading…
Reference in New Issue