Allow MetadataLookup to receive callables. Update the {{ users }} and {{ groups }} metadata lookup options to be callables that return a current list of users and groups and not a queryset. Add integrations test user_managements -> metadata app. Fixes GitLab #290. Thanks to @camiloforero for finding this one.
This commit is contained in:
@@ -29,7 +29,10 @@ class MetadataLookup(object):
|
||||
def get_as_context(cls):
|
||||
result = {}
|
||||
for entry in cls._registry:
|
||||
result[entry.name] = entry.value
|
||||
try:
|
||||
result[entry.name] = entry.value()
|
||||
except TypeError:
|
||||
result[entry.name] = entry.value
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@@ -22,6 +22,14 @@ from .links import (
|
||||
)
|
||||
|
||||
|
||||
def get_groups():
|
||||
return ','.join([group.name for group in Group.objects.all()])
|
||||
|
||||
|
||||
def get_users():
|
||||
return ','.join([user.get_full_name() or user.username for user in get_user_model().objects.all()])
|
||||
|
||||
|
||||
class UserManagementApp(MayanAppConfig):
|
||||
app_url = 'accounts'
|
||||
name = 'user_management'
|
||||
@@ -36,12 +44,12 @@ class UserManagementApp(MayanAppConfig):
|
||||
APIEndPoint(app=self, version_string='1')
|
||||
|
||||
MetadataLookup(
|
||||
description=_('All the groups.'), name='group',
|
||||
value=Group.objects.all()
|
||||
description=_('All the groups.'), name='groups',
|
||||
value=get_groups
|
||||
)
|
||||
MetadataLookup(
|
||||
description=_('All the users.'), name='users',
|
||||
value=User.objects.all()
|
||||
value=get_users
|
||||
)
|
||||
|
||||
SourceColumn(
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
from common.tests.test_views import GenericViewTestCase
|
||||
from documents.tests.test_views import GenericDocumentViewTestCase
|
||||
|
||||
from metadata.models import MetadataType
|
||||
from metadata.permissions import permission_metadata_document_edit
|
||||
|
||||
from metadata.tests.literals import (
|
||||
TEST_METADATA_TYPE_LABEL, TEST_METADATA_TYPE_NAME,
|
||||
)
|
||||
|
||||
from ..permissions import (
|
||||
permission_user_delete, permission_user_edit, permission_user_view
|
||||
@@ -179,3 +188,58 @@ class UserManagementViewTestCase(GenericViewTestCase):
|
||||
|
||||
self.assertContains(response, text='deleted', status_code=200)
|
||||
self.assertEqual(get_user_model().objects.count(), 2)
|
||||
|
||||
|
||||
class MetadataLookupIntegrationTestCase(GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(MetadataLookupIntegrationTestCase, self).setUp()
|
||||
|
||||
self.metadata_type = MetadataType.objects.create(
|
||||
name=TEST_METADATA_TYPE_NAME, label=TEST_METADATA_TYPE_LABEL
|
||||
)
|
||||
|
||||
self.document_type.metadata.create(metadata_type=self.metadata_type)
|
||||
|
||||
def test_user_list_lookup_render(self):
|
||||
self.login(
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
|
||||
self.metadata_type.lookup = '{{ users }}'
|
||||
self.metadata_type.save()
|
||||
self.document.metadata.create(metadata_type=self.metadata_type)
|
||||
self.role.permissions.add(
|
||||
permission_metadata_document_edit.stored_permission
|
||||
)
|
||||
|
||||
response = self.get(
|
||||
viewname='metadata:metadata_edit', args=(self.document.pk,)
|
||||
)
|
||||
|
||||
self.assertContains(
|
||||
response, text='<option value="{}">{}</option>'.format(
|
||||
TEST_USER_USERNAME, TEST_USER_USERNAME
|
||||
), status_code=200
|
||||
)
|
||||
|
||||
def test_group_list_lookup_render(self):
|
||||
self.login(
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
|
||||
self.metadata_type.lookup = '{{ groups }}'
|
||||
self.metadata_type.save()
|
||||
self.document.metadata.create(metadata_type=self.metadata_type)
|
||||
self.role.permissions.add(
|
||||
permission_metadata_document_edit.stored_permission
|
||||
)
|
||||
|
||||
response = self.get(
|
||||
viewname='metadata:metadata_edit', args=(self.document.pk,)
|
||||
)
|
||||
|
||||
self.assertContains(
|
||||
response, text='<option value="{}">{}</option>'.format(
|
||||
Group.objects.first().name, Group.objects.first().name
|
||||
), status_code=200
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user