import json import os from django.test import TestCase from django.urls import reverse from dav_events.models.event import Event class EventsTestCase(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 _gen_create_event_input(self): test_data_dirname = 'data' json_file_name = 'create_event_input.json' path = os.path.join(os.path.dirname(__file__), test_data_dirname, json_file_name) with open(path) as f: data_sets = json.load(f) for data in data_sets: if 'trainer_email' in data: data['trainer_email'] += '.example.com' yield data def create_event(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 test_event_create_view(self): for data in self._gen_create_event_input(): self.create_event(data)