manager: fix exception form when start_datetime is invalid (#42397)

This commit is contained in:
Lauréline Guérin 2020-05-05 14:59:24 +02:00
parent d28c18add0
commit cc6da3d0a8
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 41 additions and 20 deletions

View File

@ -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):

View File

@ -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):