agendas: force dst when importing time period exception (#59342)

This commit is contained in:
Valentin Deniaud 2021-12-06 16:09:36 +01:00
parent 387ccda63b
commit 112c7d5e6b
2 changed files with 31 additions and 1 deletions

View File

@ -2571,7 +2571,7 @@ class TimePeriodException(models.Model):
def import_json(cls, data):
def import_datetime(s):
'''Import datetime as a naive ISO8601 serialization'''
return make_aware(datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S'))
return make_aware(datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S'), is_dst=True)
for k, v in data.items():
if k.endswith('_datetime'):

View File

@ -1009,3 +1009,33 @@ def test_export_deleted_meetingtype(app):
meeting_type.save()
output = get_output_of_command('export_site')
assert len(json.loads(output)['agendas'][0]['meetingtypes']) == 0
def test_import_export_exception_dst_change(app):
agenda_meetings = Agenda.objects.create(label='Meetings Agenda', kind='meetings')
desk = Desk.objects.create(agenda=agenda_meetings, label='Desk')
# create exception starting on dst change
start = make_aware(datetime.datetime(2022, 10, 30, 2, 0), is_dst=True)
end = make_aware(datetime.datetime(2022, 10, 31, 2, 0))
TimePeriodException.objects.create(desk=desk, start_datetime=start, end_datetime=end)
output = get_output_of_command('export_site')
payload = json.loads(output)
assert payload['agendas'][0]['desks'][0]['exceptions'][0]['start_datetime'] == '2022-10-30 02:00:00'
import_site(data=payload, overwrite=True)
exception = TimePeriodException.objects.get()
assert exception.start_datetime == start
assert exception.end_datetime == end
start = exception.start_datetime = make_aware(datetime.datetime(2022, 10, 30, 2, 0), is_dst=False)
exception.save()
output = get_output_of_command('export_site')
payload = json.loads(output)
assert payload['agendas'][0]['desks'][0]['exceptions'][0]['start_datetime'] == '2022-10-30 02:00:00'
import_site(data=payload, overwrite=True)
exception = TimePeriodException.objects.get()
# dst was forced on import
assert exception.start_datetime == start - datetime.timedelta(hours=1)