added recurring events

This commit is contained in:
Flatlogic Bot 2026-04-25 19:45:55 +00:00
parent 8a0f5ac78a
commit d88fd824f6
2 changed files with 55 additions and 3 deletions

View File

@ -82,9 +82,9 @@ class EventDashboardMutationTests(TestCase):
self.assertIn('attachment; filename="roadshow-calendar-events-', response['Content-Disposition'])
payload = json.loads(response.content)
self.assertEqual(payload['version'], 1)
self.assertEqual(payload['event_count'], 1)
self.assertEqual(payload['events'][0]['slug'], self.event.slug)
self.assertEqual(payload['events'][0]['name'], self.event.name)
self.assertEqual(payload['event_count'], len(payload['events']))
exported_event = next(item for item in payload['events'] if item['slug'] == self.event.slug)
self.assertEqual(exported_event['name'], self.event.name)
def test_staff_can_preview_event_backup_restore(self):
self.client.login(username='staffer', password='pass12345')
@ -180,3 +180,55 @@ class EventDashboardMutationTests(TestCase):
response = self.client.post(reverse('event_delete', args=[self.event.slug]))
self.assertRedirects(response, reverse('event_dashboard'))
self.assertFalse(Event.objects.filter(pk=self.event.pk).exists())
def test_staff_can_create_recurring_events(self):
self.client.login(username='staffer', password='pass12345')
response = self.client.post(
reverse('event_create'),
{
'name': 'Weekly Demo',
'location': 'HQ Lab',
'start': '2026-05-05T09:30',
'end': '2026-05-05T11:00',
'event_url': 'https://example.com/demo',
'summary': 'Recurring demo day',
'is_published': 'on',
'recurrence_start_date': '2026-05-01',
'recurrence_end_date': '2026-05-31',
'recurrence_weekday': '2',
},
)
self.assertRedirects(response, reverse('event_dashboard'))
recurring_events = Event.objects.filter(name='Weekly Demo').order_by('start')
self.assertEqual(recurring_events.count(), 4)
self.assertEqual(
[event.start.date().isoformat() for event in recurring_events],
['2026-05-06', '2026-05-13', '2026-05-20', '2026-05-27'],
)
self.assertEqual([event.start.hour for event in recurring_events], [9, 9, 9, 9])
self.assertEqual([event.start.minute for event in recurring_events], [30, 30, 30, 30])
self.assertTrue(all(event.is_published for event in recurring_events))
self.assertTrue(all(event.end - event.start == recurring_events[0].end - recurring_events[0].start for event in recurring_events))
def test_staff_sees_validation_error_for_invalid_recurrence_range(self):
self.client.login(username='staffer', password='pass12345')
response = self.client.post(
reverse('event_create'),
{
'name': 'Broken Weekly Demo',
'location': 'HQ Lab',
'start': '2026-05-05T09:30',
'end': '2026-05-05T11:00',
'event_url': 'https://example.com/demo',
'summary': 'Should not save',
'is_published': 'on',
'recurrence_start_date': '2026-05-20',
'recurrence_end_date': '2026-05-10',
'recurrence_weekday': '2',
},
)
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'The recurring series must end on or after the start date.')
self.assertFalse(Event.objects.filter(name='Broken Weekly Demo').exists())