Merge pull request '48_Share_with_full_known_users' (#51) from 48_Share_with_full_known_users into master

Reviewed-on: SGD-Nord/konova#51
This commit is contained in:
Michel Peltriaux 2021-12-15 09:35:53 +01:00
commit 262f85e0e0
5 changed files with 65 additions and 5 deletions

View File

@ -36,7 +36,7 @@ class ShareModalForm(BaseModalForm):
user_select = forms.ModelMultipleChoiceField( user_select = forms.ModelMultipleChoiceField(
label=_("Add user to share with"), label=_("Add user to share with"),
label_suffix="", label_suffix="",
help_text=_("Multiple selection possible - You can only select users which do not already have access"), help_text=_("Multiple selection possible - You can only select users which do not already have access. Enter the full username."),
required=False, required=False,
queryset=User.objects.all(), queryset=User.objects.all(),
widget=autocomplete.ModelSelect2Multiple( widget=autocomplete.ModelSelect2Multiple(

View File

@ -70,7 +70,7 @@ class ShareUserAutocomplete(Select2QuerySetView):
def get_queryset(self): def get_queryset(self):
if self.request.user.is_anonymous: if self.request.user.is_anonymous:
return User.objects.none() return User.objects.none()
exclude_user_ids = self.forwarded.get("users", [None]) exclude_user_ids = self.forwarded.get("users", [])
_exclude = {"id__in": exclude_user_ids} _exclude = {"id__in": exclude_user_ids}
qs = User.objects.all().exclude( qs = User.objects.all().exclude(
**_exclude **_exclude
@ -78,8 +78,9 @@ class ShareUserAutocomplete(Select2QuerySetView):
"username" "username"
) )
if self.q: if self.q:
# Due to privacy concerns only a full username match will return the proper user entry
qs = qs.filter( qs = qs.filter(
username__istartswith=self.q username=self.q
) )
return qs return qs

View File

@ -0,0 +1,59 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 14.12.21
"""
import json
from django.urls import reverse
from konova.tests.test_views import BaseTestCase
from django.test.client import Client
class AutocompleteTestCase(BaseTestCase):
@classmethod
def setUpTestData(cls):
super().setUpTestData()
cls.client = Client()
def test_user_autocomplete(self):
self.client.login(username=self.superuser.username, password=self.superuser_pw)
user_autocomplete_url = reverse("share-user-autocomplete")
username = self.user.username
# Provide the full name --> success
data = {
"q": username
}
response = self.client.get(
user_autocomplete_url,
data,
)
content = json.loads(response.content)
self.assertEqual(username, content["results"][0]["text"])
self.assertEqual(str(self.user.id), content["results"][0]["id"])
# Provide only the first letter --> no result
data = {
"q": username[0]
}
response = self.client.get(
user_autocomplete_url,
data,
)
content = json.loads(response.content)
self.assertEqual([], content["results"])
# Provide full name + too much --> no result
data = {
"q": username + "t"
}
response = self.client.get(
user_autocomplete_url,
data,
)
content = json.loads(response.content)
self.assertEqual([], content["results"])

Binary file not shown.

View File

@ -1289,10 +1289,10 @@ msgstr "Nutzer direkt hinzufügen"
#: intervention/forms/modalForms.py:39 #: intervention/forms/modalForms.py:39
msgid "" msgid ""
"Multiple selection possible - You can only select users which do not already " "Multiple selection possible - You can only select users which do not already "
"have access" "have access. Enter the full username."
msgstr "" msgstr ""
"Mehrfachauswahl möglich - Sie können nur Nutzer wählen, für die der Eintrag " "Mehrfachauswahl möglich - Sie können nur Nutzer wählen, für die der Eintrag "
"noch nicht freigegeben wurde" "noch nicht freigegeben wurde. Geben Sie den ganzen Nutzernamen an."
#: intervention/forms/modalForms.py:55 #: intervention/forms/modalForms.py:55
msgid "Remove check to remove access for this user" msgid "Remove check to remove access for this user"