Skip to content
Snippets Groups Projects
Commit 2ce0400a authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Add further tests to check sending of forms with little overhead

parent 26423909
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,7 @@ from django.contrib.auth.models import User ...@@ -5,7 +5,7 @@ from django.contrib.auth.models import User
from django.contrib.messages import get_messages from django.contrib.messages import get_messages
from django.contrib.messages.storage.base import Message from django.contrib.messages.storage.base import Message
from django.test import TestCase from django.test import TestCase
from django.urls import reverse_lazy from django.urls import reverse_lazy, reverse
from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKRequirement, AK, Room, AKSlot, AKOrgaMessage, \ from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKRequirement, AK, Room, AKSlot, AKOrgaMessage, \
ConstraintViolation, DefaultSlot ConstraintViolation, DefaultSlot
...@@ -15,6 +15,7 @@ class BasicViewTests: ...@@ -15,6 +15,7 @@ class BasicViewTests:
VIEWS = [] VIEWS = []
APP_NAME = '' APP_NAME = ''
VIEWS_STAFF_ONLY = [] VIEWS_STAFF_ONLY = []
EDIT_TESTCASES = []
def setUp(self): def setUp(self):
self.staff_user = User.objects.create( self.staff_user = User.objects.create(
...@@ -40,7 +41,7 @@ class BasicViewTests: ...@@ -40,7 +41,7 @@ class BasicViewTests:
:rtype: str, str :rtype: str, str
""" """
view_name_with_prefix = f"{self.APP_NAME}:{view_name[0]}" if self.APP_NAME != "" else view_name[0] view_name_with_prefix = f"{self.APP_NAME}:{view_name[0]}" if self.APP_NAME != "" else view_name[0]
url = reverse_lazy(view_name_with_prefix, kwargs=view_name[1]) url = reverse(view_name_with_prefix, kwargs=view_name[1])
return view_name_with_prefix, url return view_name_with_prefix, url
def _assert_message(self, response, expected_message, msg_prefix=""): def _assert_message(self, response, expected_message, msg_prefix=""):
...@@ -90,6 +91,58 @@ class BasicViewTests: ...@@ -90,6 +91,58 @@ class BasicViewTests:
self.assertEqual(response.status_code, 302, self.assertEqual(response.status_code, 302,
msg=f"{view_name_with_prefix} ({url}) still accessible for deactivated user") msg=f"{view_name_with_prefix} ({url}) still accessible for deactivated user")
def _to_sendable_value(self, v):
"""
Create representation sendable via POST from form data
:param v: value to prepare
:type v: any
:return: prepared value (normally either raw value or primary key of complex object)
"""
if type(v) == list:
return [e.pk for e in v]
if type(v) == "RelatedManager":
return [e.pk for e in v.all()]
return v
def test_submit_edit_form(self):
"""
Test edit forms in the most simple way (sending them again unchanged)
"""
for testcase in self.EDIT_TESTCASES:
self._test_submit_edit_form(testcase)
def _test_submit_edit_form(self, testcase):
name, url = self._name_and_url((testcase["view"], testcase["kwargs"]))
form_name = testcase.get("form_name", "form")
expected_code = testcase.get("expected_code", 302)
if "target_view" in testcase.keys():
kwargs = testcase.get("target_kwargs", testcase["kwargs"])
_, target_url = self._name_and_url((testcase["target_view"], kwargs))
else:
target_url = url
expected_message = testcase.get("expected_message", "")
admin_user = testcase.get("admin", False)
if admin_user:
self.client.force_login(self.admin_user)
else:
self.client.logout()
response = self.client.get(url)
self.assertEqual(response.status_code, 200, msg=f"{name}: Could not load edit form via GET ({url})")
form = response.context[form_name]
data = {k:self._to_sendable_value(v) for k,v in form.initial.items()}
response = self.client.post(url, data=data)
if expected_code == 200:
self.assertEqual(response.status_code, 200, msg=f"{name}: Did not return 200 ({url}")
elif expected_code == 302:
self.assertRedirects(response, target_url, msg_prefix=f"{name}: Did not redirect ({url} -> {target_url}")
if expected_message != "":
self._assert_message(response, expected_message, msg_prefix=f"{name}")
class ModelViewTests(BasicViewTests, TestCase): class ModelViewTests(BasicViewTests, TestCase):
fixtures = ['model.json'] fixtures = ['model.json']
...@@ -114,6 +167,10 @@ class ModelViewTests(BasicViewTests, TestCase): ...@@ -114,6 +167,10 @@ class ModelViewTests(BasicViewTests, TestCase):
('admin:new_event_wizard_start', {}), ('admin:new_event_wizard_start', {}),
] ]
EDIT_TESTCASES = [
{'view': 'admin:default-slots-editor', 'kwargs': {'event_slug': 'kif42'}, "admin": True},
]
def test_admin(self): def test_admin(self):
self.client.force_login(self.admin_user) self.client.force_login(self.admin_user)
for model in self.ADMIN_MODELS: for model in self.ADMIN_MODELS:
......
...@@ -32,6 +32,15 @@ class ModelViewTests(BasicViewTests, TestCase): ...@@ -32,6 +32,15 @@ class ModelViewTests(BasicViewTests, TestCase):
APP_NAME = 'submit' APP_NAME = 'submit'
EDIT_TESTCASES = [
{'view': 'ak_edit', 'target_view': 'ak_detail', 'kwargs': {'event_slug': 'kif42', 'pk': 1},
'expected_message': "AK successfully updated"},
{'view': 'akslot_edit', 'target_view': 'ak_detail', 'kwargs': {'event_slug': 'kif42', 'pk': 5},
'target_kwargs': {'event_slug': 'kif42', 'pk': 1}, 'expected_message': "AK Slot successfully updated"},
{'view': 'akowner_edit', 'target_view': 'submission_overview', 'kwargs': {'event_slug': 'kif42', 'slug': 'a'},
'target_kwargs': {'event_slug': 'kif42'}, 'expected_message': "Person Info successfully updated"},
]
def test_akslot_edit_delete_prevention(self): def test_akslot_edit_delete_prevention(self):
""" """
Slots planned already may not be modified or deleted in front end Slots planned already may not be modified or deleted in front end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment