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 | |
| parent | d2783f68a60eff33535448e07484bbaf92312ff8 (diff) | |
| download | Ishtar-a7977d70f31e1c7b8dbb2c6766124d608d889709.tar.bz2 Ishtar-a7977d70f31e1c7b8dbb2c6766124d608d889709.zip | |
✨ GDPR: record person view and person export - ✅ GDPR: views test
| -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() | 
