diff --git a/chrono/manager/views.py b/chrono/manager/views.py index f14bb8e3..5962bcd5 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -749,7 +749,7 @@ class TimePeriodExceptionListView(ManagedDeskMixin, ListView): model = TimePeriodException def get_queryset(self): - return self.model.objects.filter(desk=self.desk) + return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()) def get_context_data(self, **kwargs): context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs) diff --git a/tests/test_manager.py b/tests/test_manager.py index 0d71b6fb..86498107 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -1028,6 +1028,41 @@ def test_meetings_agenda_delete_time_period_exception(app, admin_user): resp = resp.form.submit() assert TimePeriodException.objects.count() == 0 + +def test_exception_list(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)) + past_exception = TimePeriodException.objects.create( + label='Past Exception', + desk=desk, + start_datetime=now() - datetime.timedelta(days=2), + end_datetime=now() - datetime.timedelta(days=1)) + current_exception = TimePeriodException.objects.create( + label='Current Exception', + desk=desk, + start_datetime=now() - datetime.timedelta(days=1), + end_datetime=now() + datetime.timedelta(days=1)) + future_exception = TimePeriodException.objects.create( + label='Future Exception', + desk=desk, + start_datetime=now() + datetime.timedelta(days=1), + end_datetime=now() + datetime.timedelta(days=2)) + + login(app) + resp = app.get('/manage/agendas/%d/settings' % agenda.pk) + assert '/manage/time-period-exceptions/%d/edit' % past_exception.pk not in resp.text + assert '/manage/time-period-exceptions/%d/edit' % current_exception.pk in resp.text + assert '/manage/time-period-exceptions/%d/edit' % future_exception.pk in resp.text + + resp = resp.click(href="/manage/time-period-exceptions/%d/exception-list" % desk.pk) + assert '/manage/time-period-exceptions/%d/edit' % past_exception.pk not in resp.text + assert '/manage/time-period-exceptions/%d/edit' % current_exception.pk in resp.text + assert '/manage/time-period-exceptions/%d/edit' % future_exception.pk in resp.text + + def test_agenda_import_time_period_exception_from_ics(app, admin_user): agenda = Agenda.objects.create(label='Example', kind='meetings') desk = Desk.objects.create(agenda=agenda, label='Test Desk')