From 05cb50194203e083e66f7045df0aff9bbc9849c2 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 19 Jan 2025 13:48:11 +0100 Subject: [PATCH] ludwigsburgalpin/tests: add tests for views and admin --- docker/test/entrypoint-master.sh | 4 +- jdav_web/ludwigsburgalpin/tests.py | 83 +++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/docker/test/entrypoint-master.sh b/docker/test/entrypoint-master.sh index 1e219f8..e36cc94 100755 --- a/docker/test/entrypoint-master.sh +++ b/docker/test/entrypoint-master.sh @@ -39,8 +39,8 @@ fi cd jdav_web if [[ "$DJANGO_TEST_KEEPDB" == 1 ]]; then - coverage run manage.py test startpage finance members contrib logindata mailer material -v 2 --noinput --keepdb + coverage run manage.py test startpage finance members contrib logindata mailer material ludwigsburgalpin -v 2 --noinput --keepdb else - coverage run manage.py test startpage finance members contrib logindata mailer material -v 2 --noinput + coverage run manage.py test startpage finance members contrib logindata mailer material ludwigsburgalpin -v 2 --noinput fi coverage html diff --git a/jdav_web/ludwigsburgalpin/tests.py b/jdav_web/ludwigsburgalpin/tests.py index 7ce503c..38f15a9 100644 --- a/jdav_web/ludwigsburgalpin/tests.py +++ b/jdav_web/ludwigsburgalpin/tests.py @@ -1,3 +1,82 @@ -from django.test import TestCase +from http import HTTPStatus -# Create your tests here. +from django.test import TestCase, RequestFactory +from django.utils import timezone +from django.contrib.admin.sites import AdminSite +from django.urls import reverse +from django.conf import settings +from .models import Termin, GRUPPE, KATEGORIE, KONDITION, TECHNIK, SAISON,\ + EVENTART, KLASSIFIZIERUNG +from .admin import TerminAdmin + + +class BasicTerminTestCase(TestCase): + TERMIN_NO = 10 + + def setUp(self): + for i in range(BasicTerminTestCase.TERMIN_NO): + Termin.objects.create(title='Foo {}'.format(i), + start_date=timezone.now().date(), + end_date=timezone.now().date(), + group=GRUPPE[0][0], + email=settings.TEST_MAIL, + category=KATEGORIE[0][0], + technik=TECHNIK[0][0], + max_participants=42, + anforderung_hoehe=10) + + +class TerminAdminTestCase(BasicTerminTestCase): + def test_str(self): + t = Termin.objects.all()[0] + self.assertEqual(str(t), '{} {}'.format(t.title, str(t.group))) + + def test_make_overview(self): + factory = RequestFactory() + admin = TerminAdmin(Termin, AdminSite()) + url = reverse('admin:ludwigsburgalpin_termin_changelist') + request = factory.get(url) + + response = admin.make_overview(request, Termin.objects.all()) + + self.assertEqual(response['Content-Type'], 'application/xlsx', + 'The content-type of the generated overview should be an .xlsx file.') + +class ViewTestCase(BasicTerminTestCase): + def test_get_index(self): + url = reverse('ludwigsburgalpin:index') + response = self.client.get(url) + self.assertEqual(response.status_code, HTTPStatus.OK) + + def test_submit_termin(self): + url = reverse('ludwigsburgalpin:index') + response = self.client.post(url, data={ + 'title': 'My Title', + 'subtitle': 'My Subtitle', + 'start_date': '2024-01-01', + 'end_date': '2024-02-01', + 'group': GRUPPE[0][0], + 'category': KATEGORIE[0][0], + 'condition': KONDITION[0][0], + 'technik': TECHNIK[0][0], + 'saison': SAISON[0][0], + 'eventart': EVENTART[0][0], + 'klassifizierung': KLASSIFIZIERUNG[0][0], + 'anforderung_hoehe': 10, + 'anforderung_strecke': 10, + 'anforderung_dauer': 10, + 'max_participants': 100, + }) + t = Termin.objects.get(title='My Title') + self.assertEqual(t.group, GRUPPE[0][0]) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, "Termin erfolgreich eingereicht", html=True) + + def test_submit_termin_invalid(self): + url = reverse('ludwigsburgalpin:index') + # many required fields are missing + response = self.client.post(url, data={ + 'title': 'My Title', + }) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, "Dieses Feld ist zwingend erforderlich.", html=True)