118 lines
5.0 KiB
Python
118 lines
5.0 KiB
Python
from datetime import timedelta
|
|
|
|
from django.contrib.auth import get_user_model
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
|
|
from .models import Event, Registration
|
|
|
|
|
|
class EventFlowTests(TestCase):
|
|
def setUp(self):
|
|
now = timezone.now() + timedelta(days=7)
|
|
self.user = get_user_model().objects.create_user(username='organizer', password='testpass123')
|
|
|
|
self.event = Event.objects.create(
|
|
title='Design Systems Lab',
|
|
summary='Hands-on session for collaborative design systems.',
|
|
description='A practical session for teams building consistent digital products.',
|
|
venue='Northstar Studio',
|
|
start_at=now,
|
|
end_at=now + timedelta(hours=2),
|
|
capacity=2,
|
|
)
|
|
|
|
def test_home_page_loads_event(self):
|
|
response = self.client.get(reverse('home'))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertContains(response, self.event.title)
|
|
|
|
def test_registration_creates_attendee_and_redirects(self):
|
|
response = self.client.post(
|
|
reverse('event_detail', args=[self.event.slug]),
|
|
{
|
|
'full_name': 'Jordan Lee',
|
|
'email': 'jordan@example.com',
|
|
'company': 'Studio North',
|
|
'notes': 'Vegetarian meal',
|
|
},
|
|
follow=True,
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(Registration.objects.count(), 1)
|
|
self.assertContains(response, 'Your spot is secured')
|
|
|
|
def test_capacity_overflow_goes_to_waitlist(self):
|
|
Registration.objects.create(event=self.event, full_name='One', email='one@example.com')
|
|
Registration.objects.create(event=self.event, full_name='Two', email='two@example.com')
|
|
self.client.post(
|
|
reverse('event_detail', args=[self.event.slug]),
|
|
{
|
|
'full_name': 'Three',
|
|
'email': 'three@example.com',
|
|
'company': '',
|
|
'notes': '',
|
|
},
|
|
)
|
|
self.assertEqual(Registration.objects.get(email='three@example.com').status, Registration.Status.WAITLIST)
|
|
def test_dashboard_requires_login(self):
|
|
response = self.client.get(reverse('organizer_dashboard'))
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertIn(reverse('login'), response.url)
|
|
|
|
def test_logged_in_organizer_can_open_dashboard(self):
|
|
self.client.force_login(self.user)
|
|
response = self.client.get(reverse('organizer_dashboard'))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertContains(response, 'Organizer dashboard')
|
|
|
|
|
|
|
|
def test_logged_in_organizer_can_create_event_from_dashboard_form(self):
|
|
self.client.force_login(self.user)
|
|
response = self.client.post(
|
|
reverse('organizer_event_create'),
|
|
{
|
|
'title': 'Community Breakfast',
|
|
'summary': 'Meet peers before the keynote.',
|
|
'description': 'A low-key networking breakfast for early arrivals.',
|
|
'venue': 'Northstar Cafe',
|
|
'start_at': (timezone.localtime(self.event.start_at) + timedelta(days=3)).strftime('%Y-%m-%dT%H:%M'),
|
|
'end_at': (timezone.localtime(self.event.end_at) + timedelta(days=3)).strftime('%Y-%m-%dT%H:%M'),
|
|
'capacity': 24,
|
|
'is_published': 'on',
|
|
'registration_opens': '',
|
|
'registration_closes': '',
|
|
},
|
|
follow=True,
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertTrue(Event.objects.filter(title='Community Breakfast', venue='Northstar Cafe').exists())
|
|
self.assertContains(response, 'created successfully')
|
|
|
|
def test_logged_in_organizer_can_edit_event_from_dashboard_form(self):
|
|
self.client.force_login(self.user)
|
|
response = self.client.post(
|
|
reverse('organizer_event_edit', args=[self.event.slug]),
|
|
{
|
|
'title': 'Design Systems Lab Updated',
|
|
'summary': 'Hands-on session for collaborative design systems.',
|
|
'description': 'A practical session for teams building consistent digital products.',
|
|
'venue': 'Northstar Auditorium',
|
|
'start_at': timezone.localtime(self.event.start_at).strftime('%Y-%m-%dT%H:%M'),
|
|
'end_at': timezone.localtime(self.event.end_at).strftime('%Y-%m-%dT%H:%M'),
|
|
'capacity': 40,
|
|
'is_published': 'on',
|
|
'registration_opens': '',
|
|
'registration_closes': '',
|
|
},
|
|
follow=True,
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.event.refresh_from_db()
|
|
self.assertEqual(self.event.title, 'Design Systems Lab Updated')
|
|
self.assertEqual(self.event.venue, 'Northstar Auditorium')
|
|
self.assertEqual(self.event.capacity, 40)
|
|
self.assertContains(response, 'updated successfully')
|