UPD: dav_events: more tests (with real test data).

This commit is contained in:
2019-04-03 15:33:03 +02:00
parent eac033403c
commit 084dc8c173

View File

@@ -0,0 +1,138 @@
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)