diff --git a/mayan/apps/metadata/classes.py b/mayan/apps/metadata/classes.py index 3d16e79cdb..08bd9a5d03 100644 --- a/mayan/apps/metadata/classes.py +++ b/mayan/apps/metadata/classes.py @@ -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 diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index b01334daa4..992b11dc9c 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -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( diff --git a/mayan/apps/user_management/tests/test_views.py b/mayan/apps/user_management/tests/test_views.py index 6e7ce52595..ff931c096a 100644 --- a/mayan/apps/user_management/tests/test_views.py +++ b/mayan/apps/user_management/tests/test_views.py @@ -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=''.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=''.format( + Group.objects.first().name, Group.objects.first().name + ), status_code=200 + )