161 lines
6.2 KiB
Python
161 lines
6.2 KiB
Python
from django.test import TestCase
|
|
from django.urls import reverse
|
|
|
|
from dav_events.models.event import Event
|
|
|
|
from .generic import EventMixin
|
|
|
|
|
|
class EventsTestCase(EventMixin, TestCase):
|
|
def _merge_form_data(self, form, data):
|
|
form_data = {}
|
|
for name in form.fields:
|
|
initial = form.get_initial_for_field(form.fields[name], name)
|
|
if initial is None and hasattr(form.fields[name], 'choices'):
|
|
initial = form.fields[name].choices[0][0]
|
|
if initial is not None:
|
|
form_data[name] = initial
|
|
if name in data:
|
|
form_data[name] = data[name]
|
|
return form_data
|
|
|
|
def create_event_by_view(self, data):
|
|
c = self.client
|
|
url = reverse('dav_events:create')
|
|
|
|
response = c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
|
|
# ModeForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# LocationForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# JourneyForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
if form.__class__.__name__ == 'AccommodationForm':
|
|
# AccommodationForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# RequirementsForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# TrainerForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# RegistrationForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# ChargesForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
if form.__class__.__name__ == 'TrainingForm':
|
|
# TrainingForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# DescriptionForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('form', response.context)
|
|
form = response.context['form']
|
|
self.assertEqual(form.errors, {})
|
|
|
|
# SummaryForm
|
|
form_data = self._merge_form_data(form, data)
|
|
response = c.post(url, form_data, follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
if 'form' in response.context:
|
|
self.assertEqual(response.context['form'].errors, {})
|
|
|
|
event = Event.objects.order_by('created_at').last()
|
|
return event
|
|
|
|
def gen_create_event_input(self):
|
|
exclude_fields = ('owner', 'created_at', 'number', 'planned_publication_date')
|
|
for data in self.gen_event_data(exclude_fields=exclude_fields):
|
|
ndata = {}
|
|
for key in data:
|
|
value = data[key]
|
|
if key in ('pre_meeting_1', 'pre_meeting_2'):
|
|
value = value.strftime('%d.%m.%Y %H:%M')
|
|
elif key == 'deadline':
|
|
first_day = data['first_day']
|
|
delta = first_day - value
|
|
days = delta.days
|
|
if 27 < days < 32:
|
|
value = 'month'
|
|
elif 89 < days < 92:
|
|
value = 'quarter'
|
|
else:
|
|
ndata['deadline_other'] = value.strftime('%d.%m.%Y')
|
|
value = 'OTHER'
|
|
elif key in ('first_day', 'last_day', 'alt_first_day', 'alt_last_day'):
|
|
value = value.strftime('%d.%m.%Y')
|
|
elif key in ('meeting_time', 'departure_time', 'return_departure_time', 'return_arrival_time'):
|
|
if value.second == 0:
|
|
value = value.strftime('%H:%M')
|
|
else:
|
|
value = value.strftime('%H:%M:%S')
|
|
elif key in ('min_participants', 'max_participants'):
|
|
value = str(value)
|
|
elif key == 'charge':
|
|
value = str(value)
|
|
if value.endswith('.0'):
|
|
value = value[:-2]
|
|
ndata[key] = value
|
|
yield ndata
|
|
|
|
def test_event_create_view(self):
|
|
for data in self.gen_create_event_input():
|
|
self.create_event_by_view(data)
|