manager: add multi-word role search (#86979)
gitea/authentic/pipeline/head This commit looks good
Details
gitea/authentic/pipeline/head This commit looks good
Details
This commit is contained in:
parent
af6ad87f92
commit
35e0425386
|
@ -402,7 +402,10 @@ class ServiceRoleSearchForm(CssClass, PrefixFormMixin, FormWithRequest):
|
|||
if hasattr(super(), 'filter'):
|
||||
qs = super().filter(qs)
|
||||
if self.cleaned_data.get('text'):
|
||||
qs = qs.filter(name__icontains=self.cleaned_data['text'])
|
||||
for word in (w.strip() for w in self.cleaned_data.get('text').split(' ')):
|
||||
if not word:
|
||||
continue
|
||||
qs = qs.filter(name__icontains=word)
|
||||
if not app_settings.SHOW_INTERNAL_ROLES and not self.cleaned_data.get('internals'):
|
||||
qs = qs.exclude(slug__startswith='_')
|
||||
return qs
|
||||
|
|
|
@ -17,8 +17,10 @@
|
|||
import json
|
||||
|
||||
import django_tables2 as tables
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from django.utils.encoding import force_bytes, force_str
|
||||
from pyquery import PyQuery
|
||||
from webtest import Upload
|
||||
|
||||
from authentic2.a2_rbac.models import OrganizationalUnit, Role
|
||||
|
@ -384,6 +386,58 @@ def test_manager_role_csv_import(app, admin, ou1, ou2):
|
|||
assert 'name,slug,ou' in resp.text
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'role_names,search_text,expt_found',
|
||||
[
|
||||
(
|
||||
['A random test role', 'Random test stuff', 'Some test role', 'Something else', 'SomeTest'],
|
||||
' rand role',
|
||||
[0],
|
||||
),
|
||||
(
|
||||
['A random test role', 'Random test stuff', 'Some test role', 'Something else', 'SomeTest'],
|
||||
' test rand ',
|
||||
[0, 1],
|
||||
),
|
||||
(
|
||||
['A random test role', 'Random test stuff', 'Some test role', 'Something else', 'SomeTest'],
|
||||
'test some',
|
||||
[2, 4],
|
||||
),
|
||||
(
|
||||
['A random test role', 'Random test stuff', 'Some test role', 'Something else', 'SomeTest'],
|
||||
' SoMe ',
|
||||
[2, 3, 4],
|
||||
),
|
||||
(
|
||||
['A random test role', 'Random test stuff', 'Some test role', 'Something else', 'SomeTest'],
|
||||
' teste some',
|
||||
[],
|
||||
),
|
||||
(
|
||||
['A random test role', 'Random test stuff', 'Some test role', 'Something else', 'SomeTest'],
|
||||
' ',
|
||||
[0, 1, 2, 3, 4],
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_manager_role_search(app, admin, role_names, search_text, expt_found):
|
||||
roles = [Role.objects.create(name=name, ou=get_default_ou()) for name in role_names]
|
||||
resp = login(app, admin, '/manage/roles/')
|
||||
resp.form['search-text'] = search_text
|
||||
|
||||
result = resp.form.submit()
|
||||
for expt_role in [roles[i] for i in expt_found]:
|
||||
assert (
|
||||
len(PyQuery(result.text).find(f'tr[data-pk="{expt_role.pk}"]')) == 1
|
||||
), 'Role %r should be found with %r' % (expt_role.name, search_text)
|
||||
|
||||
for non_expt_role_pk in [roles[i].pk for i in range(len(role_names)) if i not in expt_found]:
|
||||
assert (
|
||||
len(PyQuery(result.text).find(f'tr[data-pk="{non_expt_role_pk}"]')) == 0
|
||||
), 'Role %r should not be found with %r' % (expt_role.name, search_text)
|
||||
|
||||
|
||||
def test_role_members_display_role_parents(app, superuser, settings, simple_role):
|
||||
url = reverse('a2-manager-role-members', kwargs={'pk': simple_role.pk})
|
||||
|
||||
|
|
Loading…
Reference in New Issue