manager: redirect day view to last day of month when out of range (#26455)

This commit is contained in:
Frédéric Péters 2018-10-31 11:43:30 +01:00
parent 5f042b7ee5
commit 6b99e6e0d4
2 changed files with 27 additions and 3 deletions

View File

@ -205,9 +205,21 @@ class AgendaDateView(object):
# specify 6am time to get the expected timezone on daylight saving time
# days.
self.date = make_aware(datetime.datetime.strptime(
'%s-%s-%s 06:00' % (self.get_year(), self.get_month(), self.get_day()),
'%Y-%m-%d %H:%M'))
try:
self.date = make_aware(datetime.datetime.strptime(
'%s-%s-%s 06:00' % (self.get_year(), self.get_month(), self.get_day()),
'%Y-%m-%d %H:%M'))
except ValueError: # day is out of range for month
# redirect to last day of month
date = datetime.date(int(self.get_year()), int(self.get_month()), 1)
date += datetime.timedelta(days=40)
date = date.replace(day=1)
date -= datetime.timedelta(days=1)
return HttpResponseRedirect(reverse('chrono-manager-agenda-day-view',
kwargs={'pk': self.agenda.id,
'year': date.year,
'month': date.month,
'day': date.day}))
return super(AgendaDateView, self).dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):

View File

@ -1372,6 +1372,18 @@ def test_agenda_day_view_late_meeting(app, admin_user, manager_user, api_user):
assert resp.text.count('<tr') == 15
assert '<th class="hour">11 p.m.</th>' in resp.text
def test_agenda_invalid_day_view(app, admin_user, manager_user, api_user):
agenda = Agenda.objects.create(label='New Example', kind='meetings')
desk = Desk.objects.create(agenda=agenda, label='New Desk')
desk.save()
meetingtype = MeetingType(agenda=agenda, label='Bar', duration=30)
meetingtype.save()
login(app)
resp = app.get('/manage/agendas/%s/%d/%d/%d/' % (agenda.id, 2018, 11, 31), status=302)
assert resp.location.endswith('2018/11/30/')
def test_agenda_month_view(app, admin_user, manager_user, api_user):
agenda = Agenda.objects.create(label='Passeports', kind='meetings')
desk = Desk.objects.create(agenda=agenda, label='Desk A')