From 21db8227f8ebb11860adba35283045d9c82eb020 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Tue, 12 Sep 2023 11:49:12 +0200 Subject: [PATCH] # Unit test user * adds unit test for team creating and editing of user app --- user/tests/unit/__init__.py | 7 ++ user/tests/unit/test_forms.py | 149 ++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 user/tests/unit/__init__.py create mode 100644 user/tests/unit/test_forms.py diff --git a/user/tests/unit/__init__.py b/user/tests/unit/__init__.py new file mode 100644 index 0000000..4301bfc --- /dev/null +++ b/user/tests/unit/__init__.py @@ -0,0 +1,7 @@ +""" +Author: Michel Peltriaux +Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany +Contact: ksp-servicestelle@sgdnord.rlp.de +Created on: 12.09.23 + +""" diff --git a/user/tests/unit/test_forms.py b/user/tests/unit/test_forms.py new file mode 100644 index 0000000..9aac1d1 --- /dev/null +++ b/user/tests/unit/test_forms.py @@ -0,0 +1,149 @@ +""" +Author: Michel Peltriaux +Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany +Contact: ksp-servicestelle@sgdnord.rlp.de +Created on: 12.09.23 + +""" +from django.test import RequestFactory +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ + +from konova.tests.test_views import BaseTestCase +from user.forms.modals.team import NewTeamModalForm, EditTeamModalForm +from user.models import Team + + +class NewTeamModalFormTestCase(BaseTestCase): + + def setUp(self) -> None: + super().setUp() + self.request = RequestFactory().request() + self.request.user = self.user + + def test_init(self): + form = NewTeamModalForm( + request=self.request + ) + self.assertEqual(form.form_title, str(_("Create new team"))) + self.assertEqual(form.form_caption, str(_("You will become the administrator for this group by default. You do not need to add yourself to the list of members."))) + self.assertEqual(form.action_url, reverse("user:team-new")) + self.assertEqual(form.cancel_redirect, reverse("user:team-index")) + self.assertEqual(form.request, self.request) + self.assertEqual(form.user, self.request.user) + + def test_is_valid(self): + invalid_data = { + "name": self.team.name, + "description": "Test description", + "members": [self.superuser.id,], + } + form = NewTeamModalForm( + invalid_data, + request=self.request + ) + self.assertFalse(form.is_valid()) + self.assertTrue(form.has_error("name")) + + valid_data = invalid_data + valid_data["name"] = self.team.name + "_OTHER" + + form = NewTeamModalForm( + invalid_data, + request=self.request + ) + self.assertTrue(form.is_valid()) + + def test_save(self): + valid_data = { + "name": self.team.name + "_OTHER", + "description": "Test description", + "members": [self.superuser.id,], + } + form = NewTeamModalForm( + valid_data, + request=self.request + ) + self.assertTrue(form.is_valid()) + obj = form.save() + self.assertEqual(obj.name, valid_data["name"]) + self.assertEqual(obj.description, valid_data["description"]) + users = obj.users.all() + admins = obj.admins.all() + self.assertIn(self.request.user, users) + self.assertIn(self.request.user, admins) + self.assertIn(self.superuser, users) + self.assertNotIn(self.superuser, admins) + + +class EditTeamModalFormTestCase(NewTeamModalFormTestCase): + + def test_init(self): + self.team.admins.add(self.superuser) + + form = EditTeamModalForm(request=self.request, instance=self.team) + self.assertEqual(form.form_title, str(_("Edit team"))) + self.assertEqual(form.action_url, reverse("user:team-edit", args=(self.team.id,))) + self.assertEqual(form.cancel_redirect, reverse("user:team-index")) + + self.assertEqual(form.fields["name"].initial, self.team.name) + self.assertEqual(form.fields["description"].initial, self.team.description) + self.assertEqual(form.fields["members"].initial.count(), 1) + self.assertIn(self.superuser, form.fields["members"].initial) + self.assertEqual(form.fields["admins"].initial.count(), 1) + self.assertIn(self.superuser, form.fields["admins"].initial) + + def test_is_valid(self): + data = { + "name": self.team.name, + "description": self.team.description, + "members": self.team.users.values_list("id", flat=True), + "admins": self.team.admins.values_list("id", flat=True), + } + form = EditTeamModalForm( + data, + request=self.request, + instance=self.team + ) + + # Error 1: Admin not in user list + self.team.users.set([self.superuser]) + self.team.admins.set([self.user]) + self.assertFalse(form.is_valid()) + self.assertTrue(form.has_error("admins")) + + # Error 2: Admin list empty + self.team.admins.set([]) + self.assertFalse(form.is_valid()) + self.assertTrue(form.has_error("admins")) + + # Error 3: Name taken + other_team = Team.objects.create( + name=self.team.name + ) + self.team.admins.set([self.superuser]) + self.assertFalse(form.is_valid()) + self.assertTrue(form.has_error("name")) + + def test_save(self): + data = { + "name": self.team.name + "_EDITED", + "description": self.team.description + "_EDITED", + "members": [self.user.id, self.superuser.id,], + "admins": [self.user.id,], + } + form = EditTeamModalForm( + data, + request=self.request, + instance=self.team + ) + self.assertTrue(form.is_valid(), msg=form.errors) + obj = form.save() + self.assertEqual(obj.name, data["name"]) + self.assertEqual(obj.description, data["description"]) + self.assertIn(self.user, obj.users.all()) + self.assertIn(self.superuser, obj.users.all()) + self.assertIn(self.user, obj.admins.all()) + self.assertEqual(obj.admins.count(), 1) + self.assertEqual(obj.users.count(), 2) +