added recurring events
This commit is contained in:
parent
8a0f5ac78a
commit
d88fd824f6
Binary file not shown.
@ -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())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user