From d2c52a27e7ce09e3e267865807a71bffdeb95320 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Thu, 4 Apr 2019 11:51:03 +0200 Subject: [PATCH] UPD: improved the providing of real test data. --- dav_events/tests/generic.py | 54 ++++++++++++++++----- dav_events/tests/test_emails.py | 2 +- dav_events/tests/test_oneclickactions.py | 6 +-- dav_events/tests/test_views.py | 61 ++++++++++++++++-------- dav_registration/tests/test_emails.py | 2 +- dav_registration/tests/test_utils.py | 2 +- 6 files changed, 89 insertions(+), 38 deletions(-) diff --git a/dav_events/tests/generic.py b/dav_events/tests/generic.py index 9c9bc49..be47c69 100644 --- a/dav_events/tests/generic.py +++ b/dav_events/tests/generic.py @@ -1,9 +1,12 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals import datetime +import json +import os from django.apps import apps from django.contrib.auth import get_user_model from django.contrib.auth.models import Group +from django.db import models from ..models.event import Event from ..models.eventstatus import EventStatus @@ -32,20 +35,45 @@ class EventMixin(object): def get_status_label(self, status_code): 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: - data = { - 'title': 'Daytrip', - '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', - } + exclude_fields = ('owner', 'created_at', 'number', 'planned_publication_date') + data = next(self.gen_event_data(exclude_fields=exclude_fields)) event = Event(**data) event.save() diff --git a/dav_events/tests/test_emails.py b/dav_events/tests/test_emails.py index e48716e..5805cca 100644 --- a/dav_events/tests/test_emails.py +++ b/dav_events/tests/test_emails.py @@ -164,7 +164,7 @@ class EmailTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase): self.app_settings = app_config.settings 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.manager_super = self.create_user_for_role('manager_super', 'password', 'Touren', 'Referent') diff --git a/dav_events/tests/test_oneclickactions.py b/dav_events/tests/test_oneclickactions.py index 3cad3a2..c0b1da7 100644 --- a/dav_events/tests/test_oneclickactions.py +++ b/dav_events/tests/test_oneclickactions.py @@ -54,7 +54,7 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase): return uuid 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) 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) 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) action_parameters = '{},accepted,{}'.format(event.id, self.manager_super.id) @@ -154,7 +154,7 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase): self._assertRepeated(response) 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) action_parameters = '{},accepted,{}'.format(event.id, self.manager_super.id) diff --git a/dav_events/tests/test_views.py b/dav_events/tests/test_views.py index ea70826..b17fc06 100644 --- a/dav_events/tests/test_views.py +++ b/dav_events/tests/test_views.py @@ -1,12 +1,12 @@ -import json -import os from django.test import TestCase from django.urls import reverse 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): form_data = {} for name in form.fields: @@ -19,19 +19,7 @@ class EventsTestCase(TestCase): 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): + def create_event_by_view(self, data): c = self.client url = reverse('dav_events:create') @@ -132,7 +120,42 @@ class EventsTestCase(TestCase): 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) + 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) diff --git a/dav_registration/tests/test_emails.py b/dav_registration/tests/test_emails.py index 014fca1..5b8f4e8 100644 --- a/dav_registration/tests/test_emails.py +++ b/dav_registration/tests/test_emails.py @@ -92,7 +92,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): app_config = apps.get_app_config('dav_events') 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.accept_event(self.event) self.confirm_publication_event(self.event) diff --git a/dav_registration/tests/test_utils.py b/dav_registration/tests/test_utils.py index 92c0451..329467f 100644 --- a/dav_registration/tests/test_utils.py +++ b/dav_registration/tests/test_utils.py @@ -46,7 +46,7 @@ class UtilsTestCase(RegistrationMixin, EventMixin, TestCase): data = common_event_data.copy() data['first_day'] = first_day - event = self.create_event(data) + event = self.create_event_by_model(data) self.submit_event(event) self.accept_event(event)