manager: absence reason groups on agenda import/export (#51535)

This commit is contained in:
Lauréline Guérin 2021-04-01 10:01:23 +02:00
parent 013869305c
commit eb9b9f98ca
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 37 additions and 0 deletions

View File

@ -331,6 +331,9 @@ class Agenda(models.Model):
agenda['events'] = [x.export_json() for x in self.event_set.filter(primary_event__isnull=True)]
if hasattr(self, 'notifications_settings'):
agenda['notifications_settings'] = self.notifications_settings.export_json()
agenda['absence_reasons_group'] = (
self.absence_reasons_group.slug if self.absence_reasons_group else None
)
elif self.kind == 'meetings':
agenda['meetingtypes'] = [x.export_json() for x in self.meetingtype_set.all()]
agenda['desks'] = [desk.export_json() for desk in self.desk_set.all()]
@ -369,6 +372,15 @@ class Agenda(models.Model):
data['category'] = Category.objects.get(slug=data['category'])
except Category.DoesNotExist:
raise AgendaImportError(_('Missing "%s" category') % data['category'])
if data.get('absence_reasons_group'):
try:
data['absence_reasons_group'] = AbsenceReasonGroup.objects.get(
slug=data['absence_reasons_group']
)
except AbsenceReasonGroup.DoesNotExist:
raise AgendaImportError(
_('Missing "%s" absence reasons group') % data['absence_reasons_group']
)
agenda, created = cls.objects.get_or_create(slug=data['slug'], defaults=data)
if not created:
for k, v in data.items():

View File

@ -36,6 +36,7 @@ from chrono.agendas.models import (
AgendaNotificationsSettings,
AgendaReminderSettings,
UnavailabilityCalendar,
AbsenceReasonGroup,
)
from chrono.manager.utils import import_site
@ -346,6 +347,30 @@ def test_import_export_categorys(app):
assert agenda.category == category
def test_import_export_absence_reasons(app):
group = AbsenceReasonGroup.objects.create(label='foo')
agenda = Agenda.objects.create(label='Foo Bar', kind='events', absence_reasons_group=group)
output = get_output_of_command('export_site')
import_site(data={}, clean=True)
assert Agenda.objects.count() == 0
group.delete()
with pytest.raises(AgendaImportError) as excinfo:
import_site(json.loads(output), overwrite=True)
assert str(excinfo.value) == 'Missing "foo" absence reasons group'
AbsenceReasonGroup.objects.create(label='foobar')
with pytest.raises(AgendaImportError) as excinfo:
import_site(json.loads(output), overwrite=True)
assert str(excinfo.value) == 'Missing "foo" absence reasons group'
group = AbsenceReasonGroup.objects.create(label='foo')
import_site(json.loads(output), overwrite=True)
agenda = Agenda.objects.get(slug=agenda.slug)
assert agenda.absence_reasons_group == group
def test_import_export_virtual_agenda(app):
virtual_agenda = Agenda.objects.create(label='Virtual Agenda', kind='virtual')
output = get_output_of_command('export_site')