manager: fix exception form when start_datetime is invalid (#42397)
This commit is contained in:
parent
d28c18add0
commit
cc6da3d0a8
|
@ -196,10 +196,14 @@ class TimePeriodExceptionForm(forms.ModelForm):
|
|||
'end_datetime': DateTimeWidget(),
|
||||
}
|
||||
|
||||
def clean_end_datetime(self):
|
||||
if self.cleaned_data['end_datetime'] <= self.cleaned_data['start_datetime']:
|
||||
raise ValidationError(_('End datetime must be greater than start datetime.'))
|
||||
return self.cleaned_data['end_datetime']
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
if 'start_datetime' in cleaned_data and 'end_datetime' in cleaned_data:
|
||||
if cleaned_data['end_datetime'] <= cleaned_data['start_datetime']:
|
||||
self.add_error('end_datetime', _('End datetime must be greater than start datetime.'))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class VirtualMemberForm(forms.ModelForm):
|
||||
|
|
|
@ -27,6 +27,7 @@ from chrono.agendas.models import (
|
|||
TimePeriodExceptionSource,
|
||||
VirtualMember,
|
||||
)
|
||||
from chrono.manager.forms import TimePeriodExceptionForm
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
@ -1132,23 +1133,39 @@ def test_meetings_agenda_add_time_period_exception_when_cancelled_booking_exists
|
|||
assert TimePeriodException.objects.count() == 1
|
||||
|
||||
|
||||
def test_meetings_agenda_add_invalid_time_period_exception(app, admin_user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
desk = Desk.objects.create(agenda=agenda, label='Desk A')
|
||||
MeetingType(agenda=agenda, label='Blah').save()
|
||||
TimePeriod.objects.create(
|
||||
weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
|
||||
def test_meetings_agenda_add_invalid_time_period_exception():
|
||||
form = TimePeriodExceptionForm(
|
||||
data={
|
||||
'start_datetime$date': '2017-05-26',
|
||||
'start_datetime$time': '17:30',
|
||||
'end_datetime$date': '2017-05-22',
|
||||
'end_datetime$time': '08:00',
|
||||
}
|
||||
)
|
||||
login(app)
|
||||
resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
|
||||
resp = resp.click('Settings')
|
||||
resp = resp.click('Add a time period exception')
|
||||
resp.form['start_datetime$date'] = '2017-05-26'
|
||||
resp.form['start_datetime$time'] = '17:30'
|
||||
resp.form['end_datetime$date'] = '2017-05-22'
|
||||
resp.form['end_datetime$time'] = '08:00'
|
||||
resp = resp.form.submit()
|
||||
assert 'End datetime must be greater than start datetime.' in resp.text
|
||||
assert form.is_valid() is False
|
||||
assert form.errors['end_datetime'] == ['End datetime must be greater than start datetime.']
|
||||
|
||||
# start_datetime is invalid
|
||||
form = TimePeriodExceptionForm(
|
||||
data={
|
||||
'start_datetime$date': '2017-05-26',
|
||||
'start_datetime$time': 'foo',
|
||||
'end_datetime$date': '2017-05-22',
|
||||
'end_datetime$time': '08:00',
|
||||
}
|
||||
)
|
||||
assert form.is_valid() is False
|
||||
|
||||
# end_datetime is invalid
|
||||
form = TimePeriodExceptionForm(
|
||||
data={
|
||||
'start_datetime$date': '2017-05-26',
|
||||
'start_datetime$time': '17:30',
|
||||
'end_datetime$date': 'bar',
|
||||
'end_datetime$time': '08:00',
|
||||
}
|
||||
)
|
||||
assert form.is_valid() is False
|
||||
|
||||
|
||||
def test_meetings_agenda_delete_time_period_exception(app, admin_user):
|
||||
|
|
Loading…
Reference in New Issue