Unit tests intervention

* adds tests for share and revocation forms
This commit is contained in:
mpeltriaux 2023-08-31 12:17:28 +02:00
parent 2fa8783fd9
commit 963dd57cb2

View File

@ -6,15 +6,24 @@ Created on: 24.08.23
""" """
import json import json
from datetime import timedelta
from django.core.exceptions import ObjectDoesNotExist
from django.urls import reverse from django.urls import reverse
from django.utils.timezone import now from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.test import RequestFactory
from intervention.forms.intervention import NewInterventionForm, EditInterventionForm from intervention.forms.intervention import NewInterventionForm, EditInterventionForm
from intervention.forms.modals.revocation import NewRevocationModalForm, EditRevocationModalForm, \
RemoveRevocationModalForm
from intervention.forms.modals.share import ShareModalForm
from intervention.models import Revocation
from konova.forms import SimpleGeomForm from konova.forms import SimpleGeomForm
from konova.settings import DEFAULT_GROUP, ZB_GROUP
from konova.tests.test_views import BaseTestCase from konova.tests.test_views import BaseTestCase
from konova.utils.generators import generate_random_string from konova.utils.generators import generate_random_string
from konova.utils.message_templates import REVOCATION_ADDED, REVOCATION_EDITED, REVOCATION_REMOVED
from user.models import UserAction from user.models import UserAction
@ -121,3 +130,204 @@ class EditInterventionFormTestCase(NewInterventionFormTestCase):
self.assertEqual(obj.legal.registration_date, today) self.assertEqual(obj.legal.registration_date, today)
self.assertEqual(obj.responsible.registration_file_number, data["registration_file_number"]) self.assertEqual(obj.responsible.registration_file_number, data["registration_file_number"])
self.assertEqual(obj.responsible.conservation_file_number, data["conservation_file_number"]) self.assertEqual(obj.responsible.conservation_file_number, data["conservation_file_number"])
class ShareModalFormTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
self.request = RequestFactory().request()
self.request.user = self.superuser
def test_init(self):
self.intervention.access_token = None
self.intervention.save()
form = ShareModalForm(
request=self.request,
instance=self.intervention
)
self.assertIsNotNone(self.intervention.access_token)
self.assertEqual(form.form_title, str(_("Share")))
self.assertEqual(form.form_caption, str(_("Share settings for {}").format(
self.intervention.identifier
)))
self.assertEqual(form.template, "modal/modal_form.html")
self.assertEqual(form.instance, self.intervention)
self.assertEqual(form.user, self.superuser)
def test_is_valid_and_save(self):
# make user default-group-only (special treatment)
self.superuser.groups.set(
self.groups.filter(
name=DEFAULT_GROUP
)
)
self.assertNotIn(self.superuser, self.intervention.shared_users)
self.assertNotIn(self.team, self.intervention.shared_teams)
# Add new sharing data
## Default-only is able to add new sharing but can not remove existing ones
data = {
"users": [self.superuser.id,],
"teams": [self.team.id,],
}
form = ShareModalForm(
data,
request=self.request,
instance=self.intervention,
)
self.assertTrue(form.is_valid(), msg=form.errors)
form.save()
self.assertIn(self.superuser, self.intervention.shared_users)
self.assertIn(self.team, self.intervention.shared_teams)
# Try to remove sharing data das default-only user
data = {
"users": [],
"teams": [],
}
form = ShareModalForm(
data,
request=self.request,
instance=self.intervention,
)
self.assertFalse(form.is_valid(), msg=form.errors)
self.assertTrue(form.has_error("teams"))
self.assertTrue(form.has_error("users"))
# Add another permission group for user
self.superuser.groups.add(
self.groups.get(
name=ZB_GROUP
)
)
form = ShareModalForm(
data,
request=self.request,
instance=self.intervention,
)
self.assertTrue(form.is_valid(), msg=form.errors)
self.assertIn(self.superuser, self.intervention.shared_users)
self.assertIn(self.team, self.intervention.shared_teams)
form.save()
self.assertNotIn(self.superuser, self.intervention.shared_users)
self.assertNotIn(self.team, self.intervention.shared_teams)
class NewRevocationModalFormTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
self.request = RequestFactory().request()
self.request.user = self.superuser
def test_init(self):
form = NewRevocationModalForm(
request=self.request,
instance=self.intervention
)
self.assertEqual(form.instance, self.intervention)
self.assertEqual(form.user, self.request.user)
self.assertEqual(form.request, self.request)
self.assertEqual(form.form_title, str(_("Add revocation")))
self.assertEqual(form.form_caption, "")
self.assertEqual(form.form_attrs, {
"enctype": "multipart/form-data"
})
def test_save(self):
data = {
"date": now().date(),
"file": None,
"comment": generate_random_string(20, use_letters_uc=True)
}
form = NewRevocationModalForm(
data,
request=self.request,
instance=self.intervention
)
self.assertTrue(form.is_valid(), msg=form.errors)
obj = form.save()
self.assertEqual(obj.intervention, self.intervention)
self.assertEqual(obj.date, data["date"])
self.assertEqual(obj.legal, self.intervention.legal)
self.assertEqual(obj.comment, data["comment"])
last_log = self.intervention.log.first()
self.assertEqual(last_log.user, self.superuser)
self.assertEqual(last_log.action, UserAction.EDITED)
self.assertEqual(last_log.comment, REVOCATION_ADDED)
class EditRevocationModalFormTestCase(NewRevocationModalFormTestCase):
def setUp(self) -> None:
super().setUp()
self.revoc = Revocation.objects.get_or_create(
date=now().date(),
comment="TEST",
legal=self.intervention.legal,
)[0]
def test_init(self):
new_date = now().date() - timedelta(days=10)
data = {
"date": new_date,
"comment": generate_random_string(20, use_letters_lc=True)
}
form = EditRevocationModalForm(
data,
request=self.request,
instance=self.intervention,
revocation=self.revoc
)
self.assertTrue(form.is_valid(), msg=form.errors)
obj = form.save()
self.assertEqual(obj.date, new_date)
self.assertEqual(obj.comment, data["comment"])
self.assertEqual(obj.legal, self.intervention.legal)
self.assertEqual(obj.intervention, self.intervention)
last_log = self.intervention.log.first()
self.assertEqual(last_log.action, UserAction.EDITED)
self.assertEqual(last_log.user, self.superuser)
self.assertEqual(last_log.comment, REVOCATION_EDITED)
class RemoveRevocationModalFormTestCase(EditRevocationModalFormTestCase):
def setUp(self) -> None:
super().setUp()
def test_init(self):
form = RemoveRevocationModalForm(
request=self.request,
instance=self.intervention,
revocation=self.revoc,
)
self.assertEqual(form.instance, self.intervention)
self.assertEqual(form.revocation, self.revoc)
self.assertEqual(form.request, self.request)
self.assertEqual(form.user, self.request.user)
def test_save(self):
data = {
"confirm": True,
}
form = RemoveRevocationModalForm(
data,
request=self.request,
instance=self.intervention,
revocation=self.revoc
)
self.assertTrue(form.is_valid(), msg=form.errors)
form.save()
try:
self.revoc.refresh_from_db()
self.fail("Revocation should not exist anymore")
except ObjectDoesNotExist:
pass
last_log = self.intervention.log.first()
self.assertEqual(last_log.action, UserAction.EDITED)
self.assertEqual(last_log.user, self.superuser)
self.assertEqual(last_log.comment, REVOCATION_REMOVED)