from datetime import date, timedelta from django.test import TestCase from wagtail.models import Page, Site from core.models import EventIndexPage, EventPage, HomePage class EventIndexPageTemplateTests(TestCase): @classmethod def setUpTestData(cls): default_site = Site.objects.filter(is_default_site=True).first() if default_site: cls.home_page = default_site.root_page.specific default_site.hostname = 'testserver' default_site.site_name = 'Test site' default_site.save() else: root_page = Page.get_first_root_node() cls.home_page = HomePage(title='Home', slug='home') root_page.add_child(instance=cls.home_page) cls.home_page.save_revision().publish() Site.objects.create( hostname='testserver', root_page=cls.home_page, is_default_site=True, site_name='Test site', ) cls.index_page = EventIndexPage(title='Events', slug='events-overview') cls.home_page.add_child(instance=cls.index_page) cls.index_page.save_revision().publish() def test_event_index_page_renders_enhanced_timeline_layout(self): event_page = EventPage( title='Spring Academy', slug='spring-academy', subtitle='Music and masterclasses', start_date=date.today() + timedelta(days=14), end_date=date.today() + timedelta(days=16), location_name='Konzerthaus', location_street='Street 1', location_city='10115 Berlin', show_in_event_calendar=True, is_partner_event=True, registration_start_date=date.today(), ) self.index_page.add_child(instance=event_page) event_page.save_revision().publish() response = self.client.get(self.index_page.url) self.assertContains(response, 'event-index-timeline') self.assertContains(response, 'timeline-page-hero') self.assertContains(response, 'event-timeline-card') self.assertContains(response, 'event-timeline-placeholder') self.assertContains(response, 'Partner Event') self.assertContains(response, 'Zur Anmeldung') self.assertContains(response, 'Konzerthaus') def test_event_index_page_shows_empty_state_without_events(self): response = self.client.get(self.index_page.url) self.assertContains(response, 'timeline-empty-state') self.assertContains(response, 'Zurzeit sind keine Veranstaltungen geplant.')