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:
Roberto Rosario
2016-05-19 19:33:58 -04:00
parent 4de3bb99e2
commit d1c87fe102
3 changed files with 79 additions and 4 deletions

View File

@@ -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

View File

@@ -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(

View File

@@ -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
)