Unit test user app

* adds unit test for User model and forms
* refactors functions from user_checks.py into User class and drops user_checks.py
This commit is contained in:
2023-09-13 09:49:40 +02:00
parent 19baf7ba86
commit 9117abd1d8
14 changed files with 263 additions and 70 deletions

View File

@@ -5,13 +5,16 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 12.09.23
"""
from django.core.exceptions import ObjectDoesNotExist
from django.test import RequestFactory
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from api.models import APIUserToken
from konova.tests.test_views import BaseTestCase
from user.forms.modals.team import NewTeamModalForm, EditTeamModalForm
from user.models import Team
from user.forms.modals.team import NewTeamModalForm, EditTeamModalForm, RemoveTeamModalForm, LeaveTeamModalForm
from user.forms.user import UserNotificationForm, UserAPITokenForm
from user.models import Team, UserAction, UserNotification
class NewTeamModalFormTestCase(BaseTestCase):
@@ -147,3 +150,137 @@ class EditTeamModalFormTestCase(NewTeamModalFormTestCase):
self.assertEqual(obj.admins.count(), 1)
self.assertEqual(obj.users.count(), 2)
class RemoveTeamModalFormTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
self.request = RequestFactory().request()
self.request.user = self.user
def test_init(self):
form = RemoveTeamModalForm(
request=self.request,
instance=self.team
)
self.assertEqual(form.form_caption, str(_("ATTENTION!\n\nRemoving the team means all members will lose their access to data, based on this team! \n\nAre you sure to remove this team?")))
self.assertEqual(form.user, self.request.user)
self.assertEqual(form.request, self.request)
def test_save(self):
data = {
"confirm": True
}
form = RemoveTeamModalForm(
data,
request=self.request,
instance=self.team
)
self.assertTrue(form.is_valid(), msg=form.errors)
form.save()
self.team.refresh_from_db()
self.assertIsNotNone(self.team.deleted)
self.assertEqual(self.team.deleted.user, self.request.user)
self.assertEqual(self.team.deleted.action, UserAction.DELETED)
class LeaveTeamModalFormTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
self.request = RequestFactory().request()
self.request.user = self.user
def test_init(self):
form = LeaveTeamModalForm(
request=self.request,
instance=self.team
)
self.assertEqual(form.form_title, str(_("Leave team")))
def test_save(self):
self.team.users.add(self.user)
data = {
"confirm": True,
}
form = LeaveTeamModalForm(
data,
request=self.request,
instance=self.team
)
self.assertTrue(form.is_valid(), msg=form.errors)
self.assertIn(self.request.user, self.team.users.all())
form.save()
self.assertNotIn(self.request.user, self.team.users.all())
class UserNotificationFormTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
if not UserNotification.objects.all().exists():
self.notifications = UserNotification.objects.bulk_create(
[
UserNotification(id="notification_1", name="notification_1", is_active=True),
UserNotification(id="notification_2", name="notification_2", is_active=True),
UserNotification(id="notification_3", name="notification_3", is_active=True),
UserNotification(id="notification_4", name="notification_4", is_active=True),
]
)
def test_init(self):
form = UserNotificationForm(
user=self.user
)
self.assertEqual(form.form_title, str(_("Edit notifications")))
self.assertEqual(form.form_caption, "")
self.assertEqual(form.action_url, reverse("user:notifications"))
self.assertEqual(form.cancel_redirect, reverse("user:index"))
def test_save(self):
selected_notification = UserNotification.objects.first()
data = {
"notifications": [selected_notification.id,]
}
form = UserNotificationForm(
data=data,
user=self.user
)
self.assertTrue(form.is_valid(), msg=form.errors)
self.assertEqual(self.user.notifications.count(), 0)
form.save()
self.assertEqual(self.user.notifications.count(), 1)
self.assertIn(selected_notification, self.user.notifications.all())
class UserAPITokenFormTestCase(BaseTestCase):
def test_init(self):
form = UserAPITokenForm(
instance=self.user
)
self.assertEqual(form.form_title, str(_("Create new token")))
self.assertEqual(form.form_caption, str(_("A new token needs to be validated by an administrator!")))
self.assertEqual(form.action_url, reverse("user:api-token"))
self.assertEqual(form.cancel_redirect, reverse("user:index"))
self.assertIsNone(form.fields["token"].initial)
self.assertTrue(form.fields["token"].widget.attrs["readonly"])
def test_save(self):
data = {
"token": APIUserToken().token
}
form = UserAPITokenForm(
data,
instance=self.user
)
self.assertTrue(form.is_valid(), msg=form.errors)
self.assertIsNone(self.user.api_token)
token = form.save()
self.assertEqual(self.user.api_token, token)
new_token = form.save()
self.assertEqual(self.user.api_token, new_token)
try:
token.refresh_from_db()
self.fail("Token should be deleted and not be fetchable anymore")
except ObjectDoesNotExist:
pass