UPD: improved the providing of real test data.
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import datetime
|
import datetime
|
||||||
|
import json
|
||||||
|
import os
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
from ..models.event import Event
|
from ..models.event import Event
|
||||||
from ..models.eventstatus import EventStatus
|
from ..models.eventstatus import EventStatus
|
||||||
@@ -32,20 +35,45 @@ class EventMixin(object):
|
|||||||
def get_status_label(self, status_code):
|
def get_status_label(self, status_code):
|
||||||
return EventStatus.objects.get(code=status_code).label
|
return EventStatus.objects.get(code=status_code).label
|
||||||
|
|
||||||
def create_event(self, data=None):
|
def gen_event_data(self, exclude_fields=None):
|
||||||
|
if exclude_fields is None:
|
||||||
|
exclude_fields = []
|
||||||
|
|
||||||
|
data_dirname = 'data'
|
||||||
|
data_filename = 'events.json'
|
||||||
|
path = os.path.join(os.path.dirname(__file__), data_dirname, data_filename)
|
||||||
|
with open(path) as f:
|
||||||
|
data_sets = json.load(f)
|
||||||
|
for obj_data in data_sets:
|
||||||
|
data = {}
|
||||||
|
fields_data = obj_data['fields']
|
||||||
|
for key in fields_data:
|
||||||
|
if key in exclude_fields:
|
||||||
|
continue
|
||||||
|
value = fields_data[key]
|
||||||
|
if value in (None, ''):
|
||||||
|
continue
|
||||||
|
elif key == 'ski_lift' and value is False:
|
||||||
|
continue
|
||||||
|
elif key == 'arrivial_previous_day' and value is False:
|
||||||
|
continue
|
||||||
|
if key == 'created_at':
|
||||||
|
value = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
|
elif key in ('pre_meeting_1', 'pre_meeting_2'):
|
||||||
|
value = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
|
||||||
|
elif key in ('first_day', 'last_day', 'alt_first_day', 'alt_last_day', 'deadline'):
|
||||||
|
value = datetime.datetime.strptime(value, '%Y-%m-%d').date()
|
||||||
|
elif key in ('meeting_time', 'departure_time', 'return_departure_time', 'return_arrival_time'):
|
||||||
|
value = datetime.datetime.strptime(value, '%H:%M:%S').time()
|
||||||
|
elif key == 'trainer_email':
|
||||||
|
value += '.example.com'
|
||||||
|
data[key] = value
|
||||||
|
yield data
|
||||||
|
|
||||||
|
def create_event_by_model(self, data=None):
|
||||||
if data is None:
|
if data is None:
|
||||||
data = {
|
exclude_fields = ('owner', 'created_at', 'number', 'planned_publication_date')
|
||||||
'title': 'Daytrip',
|
data = next(self.gen_event_data(exclude_fields=exclude_fields))
|
||||||
'description': 'Testevent',
|
|
||||||
'mode': 'joint',
|
|
||||||
'sport': 'W',
|
|
||||||
'level': 'beginner',
|
|
||||||
'first_day': datetime.date.today(),
|
|
||||||
'country': 'DE',
|
|
||||||
'trainer_firstname': 'Trainer',
|
|
||||||
'trainer_familyname': 'One',
|
|
||||||
'trainer_email': 'trainer@localhost',
|
|
||||||
}
|
|
||||||
|
|
||||||
event = Event(**data)
|
event = Event(**data)
|
||||||
event.save()
|
event.save()
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ class EmailTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase):
|
|||||||
self.app_settings = app_config.settings
|
self.app_settings = app_config.settings
|
||||||
|
|
||||||
event_data = TEST_EVENT_DATA
|
event_data = TEST_EVENT_DATA
|
||||||
self.event = self.create_event(event_data)
|
self.event = self.create_event_by_model(event_data)
|
||||||
self.trainer = self.event.owner
|
self.trainer = self.event.owner
|
||||||
|
|
||||||
self.manager_super = self.create_user_for_role('manager_super', 'password', 'Touren', 'Referent')
|
self.manager_super = self.create_user_for_role('manager_super', 'password', 'Touren', 'Referent')
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase):
|
|||||||
return uuid
|
return uuid
|
||||||
|
|
||||||
def _test_status_update(self, status_code, user):
|
def _test_status_update(self, status_code, user):
|
||||||
event = self.create_event(TEST_EVENT_DATA)
|
event = self.create_event_by_model(TEST_EVENT_DATA)
|
||||||
self.submit_event(event)
|
self.submit_event(event)
|
||||||
|
|
||||||
if status_code in ('publishing_web', 'publishing_facebook'):
|
if status_code in ('publishing_web', 'publishing_facebook'):
|
||||||
@@ -142,7 +142,7 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase):
|
|||||||
self._test_status_update('accepted', self.manager_w)
|
self._test_status_update('accepted', self.manager_w)
|
||||||
|
|
||||||
def test_accept_repeated(self):
|
def test_accept_repeated(self):
|
||||||
event = self.create_event(TEST_EVENT_DATA)
|
event = self.create_event_by_model(TEST_EVENT_DATA)
|
||||||
self.submit_event(event)
|
self.submit_event(event)
|
||||||
|
|
||||||
action_parameters = '{},accepted,{}'.format(event.id, self.manager_super.id)
|
action_parameters = '{},accepted,{}'.format(event.id, self.manager_super.id)
|
||||||
@@ -154,7 +154,7 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase):
|
|||||||
self._assertRepeated(response)
|
self._assertRepeated(response)
|
||||||
|
|
||||||
def test_accepted_already(self):
|
def test_accepted_already(self):
|
||||||
event = self.create_event(TEST_EVENT_DATA)
|
event = self.create_event_by_model(TEST_EVENT_DATA)
|
||||||
self.submit_event(event)
|
self.submit_event(event)
|
||||||
|
|
||||||
action_parameters = '{},accepted,{}'.format(event.id, self.manager_super.id)
|
action_parameters = '{},accepted,{}'.format(event.id, self.manager_super.id)
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import json
|
|
||||||
import os
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from dav_events.models.event import Event
|
from dav_events.models.event import Event
|
||||||
|
|
||||||
|
from .generic import EventMixin
|
||||||
|
|
||||||
class EventsTestCase(TestCase):
|
|
||||||
|
class EventsTestCase(EventMixin, TestCase):
|
||||||
def _merge_form_data(self, form, data):
|
def _merge_form_data(self, form, data):
|
||||||
form_data = {}
|
form_data = {}
|
||||||
for name in form.fields:
|
for name in form.fields:
|
||||||
@@ -19,19 +19,7 @@ class EventsTestCase(TestCase):
|
|||||||
form_data[name] = data[name]
|
form_data[name] = data[name]
|
||||||
return form_data
|
return form_data
|
||||||
|
|
||||||
def _gen_create_event_input(self):
|
def create_event_by_view(self, data):
|
||||||
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
|
c = self.client
|
||||||
url = reverse('dav_events:create')
|
url = reverse('dav_events:create')
|
||||||
|
|
||||||
@@ -132,7 +120,42 @@ class EventsTestCase(TestCase):
|
|||||||
event = Event.objects.order_by('created_at').last()
|
event = Event.objects.order_by('created_at').last()
|
||||||
return event
|
return event
|
||||||
|
|
||||||
def test_event_create_view(self):
|
def gen_create_event_input(self):
|
||||||
for data in self._gen_create_event_input():
|
exclude_fields = ('owner', 'created_at', 'number', 'planned_publication_date')
|
||||||
self.create_event(data)
|
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)
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase):
|
|||||||
app_config = apps.get_app_config('dav_events')
|
app_config = apps.get_app_config('dav_events')
|
||||||
app_config.settings.enable_email_on_status_update = False
|
app_config.settings.enable_email_on_status_update = False
|
||||||
|
|
||||||
self.event = self.create_event()
|
self.event = self.create_event_by_model()
|
||||||
self.submit_event(self.event)
|
self.submit_event(self.event)
|
||||||
self.accept_event(self.event)
|
self.accept_event(self.event)
|
||||||
self.confirm_publication_event(self.event)
|
self.confirm_publication_event(self.event)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class UtilsTestCase(RegistrationMixin, EventMixin, TestCase):
|
|||||||
data = common_event_data.copy()
|
data = common_event_data.copy()
|
||||||
data['first_day'] = first_day
|
data['first_day'] = first_day
|
||||||
|
|
||||||
event = self.create_event(data)
|
event = self.create_event_by_model(data)
|
||||||
self.submit_event(event)
|
self.submit_event(event)
|
||||||
self.accept_event(event)
|
self.accept_event(event)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user