You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kompass/jdav_web/ludwigsburgalpin/tests.py

103 lines
3.4 KiB
Python

from http import HTTPStatus
from django.conf import settings
from django.contrib.admin.sites import AdminSite
from django.test import RequestFactory
from django.test import TestCase
from django.urls import reverse
from django.utils import timezone
from .admin import TerminAdmin
from .models import EVENTART
from .models import GRUPPE
from .models import KATEGORIE
from .models import KLASSIFIZIERUNG
from .models import KONDITION
from .models import SAISON
from .models import TECHNIK
from .models import Termin
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)