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)