agendas: force dst when importing time period exception (#59342)
This commit is contained in:
parent
387ccda63b
commit
112c7d5e6b
|
@ -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'):
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue