fix: init time inputs in correct tz when editing an interim request (#4838)
* fix: init time inputs in correct tz when editing an interim request * test: add test * test: fix old tests that relied on mixing dates, times, and datetimes
This commit is contained in:
parent
895aff9480
commit
ac55b2cb6f
|
@ -223,10 +223,10 @@ class InterimMeetingModelForm(forms.ModelForm):
|
|||
|
||||
class InterimSessionModelForm(forms.ModelForm):
|
||||
date = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1"}, label='Date', required=False)
|
||||
time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'), required=True, help_text="Local time")
|
||||
time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'), required=True, help_text="Start time in meeting time zone")
|
||||
time.widget.attrs['placeholder'] = "HH:MM"
|
||||
requested_duration = CustomDurationField(required=True)
|
||||
end_time = forms.TimeField(required=False, help_text="Local time")
|
||||
end_time = forms.TimeField(required=False, help_text="End time in meeting time zone")
|
||||
end_time.widget.attrs['placeholder'] = "HH:MM"
|
||||
remote_participation = forms.ChoiceField(choices=(), required=False)
|
||||
remote_instructions = forms.CharField(
|
||||
|
@ -258,8 +258,8 @@ class InterimSessionModelForm(forms.ModelForm):
|
|||
self.is_edit = bool(self.instance.pk)
|
||||
# setup fields that aren't intrinsic to the Session object
|
||||
if self.is_edit:
|
||||
self.initial['date'] = self.instance.official_timeslotassignment().timeslot.time
|
||||
self.initial['time'] = self.instance.official_timeslotassignment().timeslot.time
|
||||
self.initial['date'] = self.instance.official_timeslotassignment().timeslot.local_start_time().date()
|
||||
self.initial['time'] = self.instance.official_timeslotassignment().timeslot.local_start_time().time()
|
||||
if self.instance.agenda():
|
||||
doc = self.instance.agenda()
|
||||
content = doc.text_or_error()
|
||||
|
|
|
@ -6,6 +6,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile
|
|||
from django.test import override_settings, RequestFactory
|
||||
|
||||
from ietf.group.factories import GroupFactory
|
||||
from ietf.meeting.factories import SessionFactory
|
||||
from ietf.meeting.forms import (FileUploadForm, ApplyToAllFileUploadForm, InterimSessionModelForm,
|
||||
InterimMeetingModelForm)
|
||||
from ietf.person.factories import PersonFactory
|
||||
|
@ -123,6 +124,15 @@ class InterimSessionModelFormTests(TestCase):
|
|||
self.assertNotIn('meetecho', choice_vals)
|
||||
self.assertIn('manual', choice_vals)
|
||||
|
||||
def test_edits_in_meeting_time_zone(self):
|
||||
# use a time zone that never has a UTC offset of 0, even with DST
|
||||
session = SessionFactory(meeting__type_id='interim', meeting__time_zone='America/Halifax')
|
||||
form = InterimSessionModelForm(instance=session)
|
||||
self.assertEqual(
|
||||
form.initial['time'].strftime('%H:%M'),
|
||||
session.official_timeslotassignment().timeslot.local_start_time().strftime('%H:%M'),
|
||||
)
|
||||
|
||||
|
||||
class InterimMeetingModelFormTests(TestCase):
|
||||
def test_enforces_authroles(self):
|
||||
|
|
|
@ -5382,12 +5382,11 @@ class InterimTests(TestCase):
|
|||
length_before = len(outbox)
|
||||
form_initial = r.context['form'].initial
|
||||
formset_initial = r.context['formset'].forms[0].initial
|
||||
new_time = formset_initial['time'] + datetime.timedelta(hours=1)
|
||||
data = {'group':group.pk,
|
||||
'meeting_type':'single',
|
||||
'session_set-0-id':meeting.session_set.first().id,
|
||||
'session_set-0-date':formset_initial['date'].strftime('%Y-%m-%d'),
|
||||
'session_set-0-time':new_time.strftime('%H:%M'),
|
||||
'session_set-0-time':'12:34',
|
||||
'session_set-0-requested_duration': '00:30',
|
||||
'session_set-0-remote_instructions':formset_initial['remote_instructions'],
|
||||
#'session_set-0-agenda':formset_initial['agenda'],
|
||||
|
@ -5400,7 +5399,10 @@ class InterimTests(TestCase):
|
|||
self.assertEqual(len(outbox),length_before)
|
||||
session = meeting.session_set.first()
|
||||
timeslot = session.official_timeslotassignment().timeslot
|
||||
self.assertEqual(timeslot.time,new_time)
|
||||
self.assertEqual(
|
||||
timeslot.time,
|
||||
meeting.tz().localize(datetime.datetime.combine(formset_initial['date'], datetime.time(12, 34))),
|
||||
)
|
||||
|
||||
def test_interim_request_edit(self):
|
||||
'''Edit request. Send notice of change'''
|
||||
|
@ -5420,13 +5422,12 @@ class InterimTests(TestCase):
|
|||
length_before = len(outbox)
|
||||
form_initial = r.context['form'].initial
|
||||
formset_initial = r.context['formset'].forms[0].initial
|
||||
new_time = formset_initial['time'] + datetime.timedelta(hours=1)
|
||||
new_duration = formset_initial['requested_duration'] + datetime.timedelta(hours=1)
|
||||
data = {'group':group.pk,
|
||||
'meeting_type':'single',
|
||||
'session_set-0-id':meeting.session_set.first().id,
|
||||
'session_set-0-date':formset_initial['date'].strftime('%Y-%m-%d'),
|
||||
'session_set-0-time':new_time.strftime('%H:%M'),
|
||||
'session_set-0-time': '12:34',
|
||||
'session_set-0-requested_duration':self.strfdelta(new_duration, '{hours}:{minutes}'),
|
||||
'session_set-0-remote_instructions':formset_initial['remote_instructions'],
|
||||
#'session_set-0-agenda':formset_initial['agenda'],
|
||||
|
@ -5440,7 +5441,10 @@ class InterimTests(TestCase):
|
|||
self.assertIn('CHANGED', outbox[-1]['Subject'])
|
||||
session = meeting.session_set.first()
|
||||
timeslot = session.official_timeslotassignment().timeslot
|
||||
self.assertEqual(timeslot.time,new_time)
|
||||
self.assertEqual(
|
||||
timeslot.time,
|
||||
meeting.tz().localize(datetime.datetime.combine(formset_initial['date'], datetime.time(12, 34))),
|
||||
)
|
||||
self.assertEqual(timeslot.duration,new_duration)
|
||||
|
||||
def strfdelta(self, tdelta, fmt):
|
||||
|
|
Loading…
Reference in a new issue