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 21db8227f8
commit d9046eb2b9
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

View File

@@ -0,0 +1,61 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 13.09.23
"""
from konova.settings import ZB_GROUP, DEFAULT_GROUP, ETS_GROUP
from konova.tests.test_views import BaseTestCase
from user.enums import UserNotificationEnum
from user.models import UserNotification
class UserTestCase(BaseTestCase):
def test_is_notification_setting_set(self):
notification = UserNotification.objects.create(
id=UserNotificationEnum.NOTIFY_ON_DEDUCTION_CHANGES.name,
name=UserNotificationEnum.NOTIFY_ON_DEDUCTION_CHANGES.value,
)
self.assertFalse(self.user.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_DEDUCTION_CHANGES))
self.user.notifications.add(notification)
self.assertTrue(self.user.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_DEDUCTION_CHANGES))
def test_is_group_member(self):
zb_group = self.groups.get(name=ZB_GROUP)
ets_group = self.groups.get(name=ETS_GROUP)
default_group = self.groups.get(name=DEFAULT_GROUP)
self.user.groups.set([])
self.assertFalse(self.user.is_zb_user())
self.assertFalse(self.user.is_ets_user())
self.assertFalse(self.user.is_default_user())
self.user.groups.add(zb_group)
self.assertTrue(self.user.is_zb_user())
self.user.groups.add(ets_group)
self.assertTrue(self.user.is_ets_user())
self.user.groups.add(default_group)
self.assertTrue(self.user.is_default_user())
def test_get_API_token(self):
self.assertIsNone(self.user.api_token)
token = self.user.get_API_token()
self.assertIsNotNone(self.user.api_token)
self.assertEqual(self.user.api_token, token)
# Make sure the same token is returned if command is called twice
token = self.user.get_API_token()
self.assertEqual(self.user.api_token, token)
def test_shared_teams_property(self):
shared_teams = self.user.shared_teams
self.assertEqual(shared_teams.count(), 0)
self.team.users.add(self.user)
shared_teams = self.user.shared_teams
self.assertEqual(shared_teams.count(), 1)
self.assertIn(self.team, shared_teams)