Add new document indexing permission. This permission allows user to view an index instance as opposed to the current permission which allows viewing an index definiton on the setup menu. Modernize the document index view tests.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -71,6 +71,10 @@
|
||||
queued to rebuild instead of a static acknowledment.
|
||||
- Add missing permission check to the document duplicate scan
|
||||
link.
|
||||
- Add new document indexing permission. This permission allows
|
||||
user to view an index instance as opposed to the current
|
||||
permission which allows viewing an index definiton on the
|
||||
setup menu.
|
||||
|
||||
3.0.1 (2018-07-08)
|
||||
=================
|
||||
|
||||
@@ -34,8 +34,9 @@ from .links import (
|
||||
from .licenses import * # NOQA
|
||||
from .permissions import (
|
||||
permission_document_indexing_create, permission_document_indexing_delete,
|
||||
permission_document_indexing_edit, permission_document_indexing_rebuild,
|
||||
permission_document_indexing_view
|
||||
permission_document_indexing_edit,
|
||||
permission_document_indexing_instance_view,
|
||||
permission_document_indexing_rebuild, permission_document_indexing_view
|
||||
)
|
||||
from .queues import * # NOQA
|
||||
from .widgets import get_instance_link, index_instance_item_link, node_level
|
||||
@@ -73,6 +74,7 @@ class DocumentIndexingApp(MayanAppConfig):
|
||||
permission_document_indexing_create,
|
||||
permission_document_indexing_delete,
|
||||
permission_document_indexing_edit,
|
||||
permission_document_indexing_instance_view,
|
||||
permission_document_indexing_rebuild,
|
||||
permission_document_indexing_view,
|
||||
)
|
||||
|
||||
@@ -9,8 +9,9 @@ from .icons import (
|
||||
)
|
||||
from .permissions import (
|
||||
permission_document_indexing_create, permission_document_indexing_edit,
|
||||
permission_document_indexing_delete, permission_document_indexing_rebuild,
|
||||
permission_document_indexing_view
|
||||
permission_document_indexing_delete,
|
||||
permission_document_indexing_instance_view,
|
||||
permission_document_indexing_rebuild,permission_document_indexing_view
|
||||
)
|
||||
|
||||
|
||||
@@ -23,7 +24,10 @@ link_document_index_list = Link(
|
||||
text=_('Indexes'), view='indexing:document_index_list',
|
||||
)
|
||||
link_index_main_menu = Link(
|
||||
icon_class=icon_index, text=_('Indexes'),
|
||||
condition=get_cascade_condition(
|
||||
app_label='document_indexing', model_name='Index',
|
||||
object_permission=permission_document_indexing_instance_view,
|
||||
), icon_class=icon_index, text=_('Indexes'),
|
||||
view='indexing:index_list'
|
||||
)
|
||||
link_index_setup = Link(
|
||||
|
||||
@@ -15,6 +15,10 @@ permission_document_indexing_edit = namespace.add_permission(
|
||||
permission_document_indexing_delete = namespace.add_permission(
|
||||
name='document_index_delete', label=_('Delete document indexes')
|
||||
)
|
||||
permission_document_indexing_instance_view = namespace.add_permission(
|
||||
name='document_index_instance_view',
|
||||
label=_('View document index instances')
|
||||
)
|
||||
permission_document_indexing_view = namespace.add_permission(
|
||||
name='document_index_view', label=_('View document indexes')
|
||||
)
|
||||
|
||||
@@ -5,7 +5,9 @@ from documents.tests import GenericDocumentViewTestCase
|
||||
from ..models import Index
|
||||
from ..permissions import (
|
||||
permission_document_indexing_create, permission_document_indexing_delete,
|
||||
permission_document_indexing_edit, permission_document_indexing_view
|
||||
permission_document_indexing_edit,
|
||||
permission_document_indexing_instance_view,
|
||||
permission_document_indexing_view
|
||||
)
|
||||
|
||||
from .literals import (
|
||||
@@ -15,35 +17,36 @@ from .literals import (
|
||||
|
||||
|
||||
class IndexViewTestCase(GenericDocumentViewTestCase):
|
||||
def test_index_create_view_no_permission(self):
|
||||
self.login_user()
|
||||
|
||||
response = self.post(
|
||||
def _request_index_create_view(self):
|
||||
return self.post(
|
||||
'indexing:index_setup_create', data={
|
||||
'label': TEST_INDEX_LABEL, 'slug': TEST_INDEX_SLUG
|
||||
}
|
||||
)
|
||||
|
||||
def test_index_create_view_no_permission(self):
|
||||
self.login_user()
|
||||
|
||||
response = self._request_index_create_view()
|
||||
self.assertEquals(response.status_code, 403)
|
||||
self.assertEqual(Index.objects.count(), 0)
|
||||
|
||||
def test_index_create_view_with_permission(self):
|
||||
self.login_user()
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_document_indexing_create.stored_permission
|
||||
self.grant_permission(
|
||||
permission=permission_document_indexing_create
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'indexing:index_setup_create', data={
|
||||
'label': TEST_INDEX_LABEL, 'slug': TEST_INDEX_SLUG
|
||||
}, follow=True
|
||||
)
|
||||
response = self._request_index_create_view()
|
||||
|
||||
self.assertContains(response, text='created', status_code=200)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(Index.objects.count(), 1)
|
||||
self.assertEqual(Index.objects.first().label, TEST_INDEX_LABEL)
|
||||
|
||||
def _request_index_delete_view(self, index):
|
||||
return self.post('indexing:index_setup_delete', args=(index.pk,))
|
||||
|
||||
def test_index_delete_view_no_permission(self):
|
||||
self.login_user()
|
||||
|
||||
@@ -51,7 +54,7 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
|
||||
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
|
||||
)
|
||||
|
||||
response = self.post('indexing:index_setup_delete', args=(index.pk,))
|
||||
response = self._request_index_delete_view(index=index)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(Index.objects.count(), 1)
|
||||
|
||||
@@ -66,13 +69,18 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
|
||||
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'indexing:index_setup_delete', args=(index.pk,), follow=True
|
||||
)
|
||||
response = self._request_index_delete_view(index=index)
|
||||
|
||||
self.assertContains(response, text='deleted', status_code=200)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(Index.objects.count(), 0)
|
||||
|
||||
def _request_index_edit_view(self, index):
|
||||
return self.post(
|
||||
'indexing:index_setup_edit', args=(index.pk,), data={
|
||||
'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG
|
||||
}
|
||||
)
|
||||
|
||||
def test_index_edit_view_no_permission(self):
|
||||
self.login_user()
|
||||
|
||||
@@ -80,34 +88,26 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
|
||||
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'indexing:index_setup_edit', args=(index.pk,), data={
|
||||
'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG
|
||||
}
|
||||
)
|
||||
response = self._request_index_edit_view(index=index)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
index = Index.objects.get(pk=index.pk)
|
||||
self.assertEqual(index.label, TEST_INDEX_LABEL)
|
||||
|
||||
def test_index_edit_view_with_permission(self):
|
||||
def test_index_edit_view_with_access(self):
|
||||
self.login_user()
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_document_indexing_edit.stored_permission
|
||||
)
|
||||
|
||||
index = Index.objects.create(
|
||||
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'indexing:index_setup_edit', args=(index.pk,), data={
|
||||
'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG
|
||||
}, follow=True
|
||||
self.grant_access(
|
||||
permission=permission_document_indexing_edit,
|
||||
obj=index
|
||||
)
|
||||
|
||||
index = Index.objects.get(pk=index.pk)
|
||||
self.assertContains(response, text='update', status_code=200)
|
||||
response = self._request_index_edit_view(index=index)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
index.refresh_from_db()
|
||||
self.assertEqual(index.label, TEST_INDEX_LABEL_EDITED)
|
||||
|
||||
def create_test_index(self):
|
||||
@@ -129,28 +129,34 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
return index
|
||||
|
||||
def _request_index_instance_node_view(self, index_instance_node):
|
||||
return self.get(
|
||||
'indexing:index_instance_node_view', args=(index_instance_node.pk,)
|
||||
)
|
||||
|
||||
def test_index_instance_node_view_no_permission(self):
|
||||
index = self.create_test_index()
|
||||
|
||||
self.login_user()
|
||||
|
||||
response = self.get(
|
||||
'indexing:index_instance_node_view', args=(index.instance_root.pk,)
|
||||
response = self._request_index_instance_node_view(
|
||||
index_instance_node=index.instance_root
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_index_instance_node_view_with_permission(self):
|
||||
def test_index_instance_node_view_with_access(self):
|
||||
index = self.create_test_index()
|
||||
|
||||
self.login_user()
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_document_indexing_view.stored_permission
|
||||
self.grant_access(
|
||||
permission=permission_document_indexing_instance_view,
|
||||
obj=index
|
||||
)
|
||||
|
||||
response = self.get(
|
||||
'indexing:index_instance_node_view', args=(index.instance_root.pk,)
|
||||
response = self._request_index_instance_node_view(
|
||||
index_instance_node=index.instance_root
|
||||
)
|
||||
|
||||
self.assertContains(response, text=TEST_INDEX_LABEL, status_code=200)
|
||||
|
||||
@@ -22,8 +22,9 @@ from .models import (
|
||||
)
|
||||
from .permissions import (
|
||||
permission_document_indexing_create, permission_document_indexing_delete,
|
||||
permission_document_indexing_edit, permission_document_indexing_rebuild,
|
||||
permission_document_indexing_view
|
||||
permission_document_indexing_edit,
|
||||
permission_document_indexing_instance_view,
|
||||
permission_document_indexing_rebuild, permission_document_indexing_view
|
||||
)
|
||||
from .tasks import task_rebuild_index
|
||||
from .widgets import node_tree
|
||||
@@ -211,7 +212,7 @@ class TemplateNodeEditView(SingleObjectEditView):
|
||||
|
||||
|
||||
class IndexListView(SingleObjectListView):
|
||||
object_permission = permission_document_indexing_view
|
||||
object_permission = permission_document_indexing_instance_view
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
@@ -233,7 +234,7 @@ class IndexInstanceNodeView(DocumentListView):
|
||||
)
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_document_indexing_view,
|
||||
permissions=permission_document_indexing_instance_view,
|
||||
user=request.user, obj=self.index_instance_node.index()
|
||||
)
|
||||
|
||||
@@ -295,7 +296,7 @@ class DocumentIndexNodeListView(SingleObjectListView):
|
||||
"""
|
||||
Show a list of indexes where the current document can be found
|
||||
"""
|
||||
object_permission = permission_document_indexing_view
|
||||
object_permission = permission_document_indexing_instance_view
|
||||
object_permission_related = 'index'
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user