Show in-progress multi-day events on the calendar (#33)
Unit Tests / test (push) Successful in 5s
Unit Tests / test (push) Successful in 5s
## Summary Closes #32. - Keep an event on Upcoming until its end date is over. If `end_time` is set, it drops off once that time passes on the end date, so an in-progress multi-day event stays visible. - Render the Past tab from `past_events` instead of `future_events`. - Show the start–end date range when the dates differ. ## Test plan - [ ] Multi-day event that started yesterday and ends tomorrow appears under Upcoming - [ ] Event whose end time has already passed appears under Past - [ ] Future single-day event still appears under Upcoming - [ ] Past tab lists finished events only - [ ] `uv run python manage.py test schasite.tests.CalendarEventTests` Reviewed-on: #33
This commit was merged in pull request #33.
This commit is contained in:
1 parent
531d97f3fc
commit
783712972b
3 files changed
+81
-15
No files matched your search
+57
-6
@@ -326,6 +326,47 @@ class CalendarEventTests(TestCase):
|
||||
self.assertFalse(undated.past_event())
|
||||
self.assertFalse(undated.future_event())
|
||||
|
||||
def test_in_progress_multiday_event_counts_as_upcoming(self):
|
||||
today = datetime.date.today()
|
||||
ongoing = CalendarEvent.objects.create(
|
||||
event_name="Block Party",
|
||||
start_date=today - datetime.timedelta(days=1),
|
||||
end_date=today + datetime.timedelta(days=1),
|
||||
)
|
||||
ended = CalendarEvent.objects.create(
|
||||
event_name="Finished Sale",
|
||||
start_date=today - datetime.timedelta(days=4),
|
||||
end_date=today - datetime.timedelta(days=1),
|
||||
)
|
||||
|
||||
self.assertTrue(ongoing.future_event())
|
||||
self.assertFalse(ongoing.past_event())
|
||||
self.assertTrue(ended.past_event())
|
||||
self.assertFalse(ended.future_event())
|
||||
|
||||
def test_end_time_hides_event_only_after_it_finishes(self):
|
||||
now = datetime.datetime.now()
|
||||
still_going = now + datetime.timedelta(hours=2)
|
||||
already_over = now - datetime.timedelta(hours=1)
|
||||
|
||||
current = CalendarEvent.objects.create(
|
||||
event_name="Still Going",
|
||||
start_date=(now - datetime.timedelta(days=1)).date(),
|
||||
end_date=still_going.date(),
|
||||
end_time=still_going.time().replace(microsecond=0),
|
||||
)
|
||||
finished = CalendarEvent.objects.create(
|
||||
event_name="Already Over",
|
||||
start_date=(already_over - datetime.timedelta(days=1)).date(),
|
||||
end_date=already_over.date(),
|
||||
end_time=already_over.time().replace(microsecond=0),
|
||||
)
|
||||
|
||||
self.assertTrue(current.future_event())
|
||||
self.assertFalse(current.past_event())
|
||||
self.assertTrue(finished.past_event())
|
||||
self.assertFalse(finished.future_event())
|
||||
|
||||
def test_time_range_display(self):
|
||||
event = CalendarEvent.objects.create(
|
||||
event_name="Timed Event",
|
||||
@@ -346,23 +387,33 @@ class CalendarEventTests(TestCase):
|
||||
def test_calendar_page_splits_past_and_future(self):
|
||||
today = datetime.date.today()
|
||||
CalendarEvent.objects.create(
|
||||
event_name="Past Event",
|
||||
event_name="Archived Picnic",
|
||||
start_date=today - datetime.timedelta(days=3),
|
||||
)
|
||||
CalendarEvent.objects.create(
|
||||
event_name="Future Event",
|
||||
start_date=today + datetime.timedelta(days=3),
|
||||
)
|
||||
CalendarEvent.objects.create(
|
||||
event_name="Ongoing Event",
|
||||
start_date=today - datetime.timedelta(days=1),
|
||||
end_date=today + datetime.timedelta(days=1),
|
||||
)
|
||||
|
||||
response = self.client.get(reverse("calendar2"))
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(len(response.context["past_events"]), 1)
|
||||
self.assertEqual(len(response.context["future_events"]), 1)
|
||||
self.assertEqual(response.context["past_events"][0].event_name, "Past Event")
|
||||
self.assertEqual(
|
||||
response.context["future_events"][0].event_name, "Future Event"
|
||||
)
|
||||
self.assertEqual(len(response.context["future_events"]), 2)
|
||||
self.assertEqual(response.context["past_events"][0].event_name, "Archived Picnic")
|
||||
future_names = {event.event_name for event in response.context["future_events"]}
|
||||
self.assertEqual(future_names, {"Future Event", "Ongoing Event"})
|
||||
content = response.content.decode()
|
||||
upcoming_html, past_html = content.split('id="past" role="tabpanel"', 1)
|
||||
self.assertIn("Ongoing Event", upcoming_html)
|
||||
self.assertNotIn("Ongoing Event", past_html)
|
||||
self.assertIn("Archived Picnic", past_html)
|
||||
self.assertNotIn("Archived Picnic", upcoming_html)
|
||||
|
||||
|
||||
@override_settings(
|
||||
|
||||
Reference in new issue
Block a user