diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-01-12 15:55:51 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-16 16:40:54 +0200 |
commit | a7977d70f31e1c7b8dbb2c6766124d608d889709 (patch) | |
tree | 75c074744d453a42a8f4736ab88cca8fd30d3193 /ishtar_common | |
parent | d2783f68a60eff33535448e07484bbaf92312ff8 (diff) | |
download | Ishtar-a7977d70f31e1c7b8dbb2c6766124d608d889709.tar.bz2 Ishtar-a7977d70f31e1c7b8dbb2c6766124d608d889709.zip |
✨ GDPR: record person view and person export - ✅ GDPR: views test
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/tests.py | 22 | ||||
-rw-r--r-- | ishtar_common/views.py | 11 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 14 |
3 files changed, 38 insertions, 9 deletions
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 8fac95853..4398ed762 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -2063,7 +2063,11 @@ class MergeTest(TestCase): class GDPRTest(TestCase): def setUp(self): - self.user, created = User.objects.get_or_create(username="username") + self.username = "username666" + self.password = "dcbqj7xnjkxnjsknx!@%" + self.user = User.objects.create_superuser( + self.username, "nomail@nomail.com", self.password + ) self.person_1 = models.Person.objects.create( name="Boule", surname=" ", @@ -2098,6 +2102,22 @@ class GDPRTest(TestCase): last_log = models.GDPRLog.objects.order_by("-pk").all()[0] self.assertEqual(last_log.persons.count(), 2) + def test_views(self): + nb = models.GDPRLog.objects.count() + c = Client() + c.login(username=self.username, password=self.password) + self.settings(GDPR_LOGGING=True) + c.get(reverse("get-person")) + self.assertEqual(models.GDPRLog.objects.count(), nb + 1) + self.assertEqual(models.GDPRLog.objects.order_by('-pk')[0].activity, "DC") + c.get(reverse("get-person", args=["csv"])) + self.assertEqual(models.GDPRLog.objects.count(), nb + 2) + self.assertEqual(models.GDPRLog.objects.order_by('-pk')[0].activity, "DE") + response = c.get(reverse("show-person", args=[self.person_1.pk, ""])) + self.assertEqual(models.GDPRLog.objects.count(), nb + 3) + self.assertEqual(models.GDPRLog.objects.order_by('-pk')[0].activity, "PC") + + def test_create_log_performance(self): persons = [] for idx in range(5000): diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 4fc2c94b7..c5ab88efa 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1106,14 +1106,19 @@ get_organization = get_item(models.Organization, "get_organization", "organizati modify_organization = modify_qa_item(models.Organization, forms.OrganizationForm) detail_organization = get_short_html_detail(models.Organization) new_author = new_qa_item(models.Author, forms.AuthorForm, page_name=_("New author")) -show_person = show_item(models.Person, "person") -def get_person_gdpr_log(request, data_type, queryset, slice_query): - activity = "DE" if data_type == "csv" else "DC" +def get_person_gdpr_log(view_name, request, data_type, queryset, slice_query=None): + if view_name == "get_item": + activity = "DE" if data_type == "csv" else "DC" + elif view_name == "show_item": + activity = "PC" if not data_type else "PC" + else: + return models.GDPRLog.create_log(request, activity, queryset, slice_query) +show_person = show_item(models.Person, "person", callback=get_person_gdpr_log) get_person = get_item(models.Person, "get_person", "person", callback=get_person_gdpr_log) diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 3ed380465..25ffe582e 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -338,7 +338,7 @@ def show_source_item(request, source_id, model, name, base_dct, extra_dct): return HttpResponse(content, content_type="application/xhtml") -def show_item(model, name, extra_dct=None, model_for_perms=None): +def show_item(model, name, extra_dct=None, model_for_perms=None, callback=None): def func(request, pk, **dct): check_model = model if model_for_perms: @@ -372,11 +372,15 @@ def show_item(model, name, extra_dct=None, model_for_perms=None): dct["window_id_underscore"] = dct["window_id"].replace("-", "_") if str(pk).startswith("source-"): return show_source_item(request, pk, model, name, dct, extra_dct) - try: - item = q.get(pk=pk) - except (ObjectDoesNotExist, ValueError): + q = q.filter(pk=pk) + if not q.count(): return HttpResponse("") + if callback: + callback("show_item", request, doc_type, q) + + item = q.all()[0] + # list current perms for perm in Permission.objects.filter( codename__startswith='view_').values_list("codename", flat=True).all(): @@ -2427,7 +2431,7 @@ def get_item( slice_query = None if not manual_sort_key: slice_query = (start, end) - callback(request, data_type, items, slice_query) + callback("get_item", request, data_type, items, slice_query) if manual_sort_key: items = items.all() |