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:
Roberto Rosario
2018-08-22 01:04:36 -04:00
parent 1890ff5bee
commit dfd2d3dc78
6 changed files with 72 additions and 51 deletions
+4
View File
@@ -71,6 +71,10 @@
queued to rebuild instead of a static acknowledment. queued to rebuild instead of a static acknowledment.
- Add missing permission check to the document duplicate scan - Add missing permission check to the document duplicate scan
link. 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) 3.0.1 (2018-07-08)
================= =================
+4 -2
View File
@@ -34,8 +34,9 @@ from .links import (
from .licenses import * # NOQA from .licenses import * # NOQA
from .permissions import ( from .permissions import (
permission_document_indexing_create, permission_document_indexing_delete, permission_document_indexing_create, permission_document_indexing_delete,
permission_document_indexing_edit, permission_document_indexing_rebuild, permission_document_indexing_edit,
permission_document_indexing_view permission_document_indexing_instance_view,
permission_document_indexing_rebuild, permission_document_indexing_view
) )
from .queues import * # NOQA from .queues import * # NOQA
from .widgets import get_instance_link, index_instance_item_link, node_level 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_create,
permission_document_indexing_delete, permission_document_indexing_delete,
permission_document_indexing_edit, permission_document_indexing_edit,
permission_document_indexing_instance_view,
permission_document_indexing_rebuild, permission_document_indexing_rebuild,
permission_document_indexing_view, permission_document_indexing_view,
) )
+7 -3
View File
@@ -9,8 +9,9 @@ from .icons import (
) )
from .permissions import ( from .permissions import (
permission_document_indexing_create, permission_document_indexing_edit, permission_document_indexing_create, permission_document_indexing_edit,
permission_document_indexing_delete, permission_document_indexing_rebuild, permission_document_indexing_delete,
permission_document_indexing_view 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', text=_('Indexes'), view='indexing:document_index_list',
) )
link_index_main_menu = Link( 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' view='indexing:index_list'
) )
link_index_setup = Link( link_index_setup = Link(
@@ -15,6 +15,10 @@ permission_document_indexing_edit = namespace.add_permission(
permission_document_indexing_delete = namespace.add_permission( permission_document_indexing_delete = namespace.add_permission(
name='document_index_delete', label=_('Delete document indexes') 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( permission_document_indexing_view = namespace.add_permission(
name='document_index_view', label=_('View document indexes') name='document_index_view', label=_('View document indexes')
) )
@@ -5,7 +5,9 @@ from documents.tests import GenericDocumentViewTestCase
from ..models import Index from ..models import Index
from ..permissions import ( from ..permissions import (
permission_document_indexing_create, permission_document_indexing_delete, 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 ( from .literals import (
@@ -15,35 +17,36 @@ from .literals import (
class IndexViewTestCase(GenericDocumentViewTestCase): class IndexViewTestCase(GenericDocumentViewTestCase):
def test_index_create_view_no_permission(self): def _request_index_create_view(self):
self.login_user() return self.post(
response = self.post(
'indexing:index_setup_create', data={ 'indexing:index_setup_create', data={
'label': TEST_INDEX_LABEL, 'slug': TEST_INDEX_SLUG '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.assertEquals(response.status_code, 403)
self.assertEqual(Index.objects.count(), 0) self.assertEqual(Index.objects.count(), 0)
def test_index_create_view_with_permission(self): def test_index_create_view_with_permission(self):
self.login_user() self.login_user()
self.role.permissions.add( self.grant_permission(
permission_document_indexing_create.stored_permission permission=permission_document_indexing_create
) )
response = self.post( response = self._request_index_create_view()
'indexing:index_setup_create', data={
'label': TEST_INDEX_LABEL, 'slug': TEST_INDEX_SLUG
}, follow=True
)
self.assertContains(response, text='created', status_code=200) self.assertEqual(response.status_code, 302)
self.assertEqual(Index.objects.count(), 1) self.assertEqual(Index.objects.count(), 1)
self.assertEqual(Index.objects.first().label, TEST_INDEX_LABEL) 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): def test_index_delete_view_no_permission(self):
self.login_user() self.login_user()
@@ -51,7 +54,7 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG 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(response.status_code, 403)
self.assertEqual(Index.objects.count(), 1) self.assertEqual(Index.objects.count(), 1)
@@ -66,13 +69,18 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
) )
response = self.post( response = self._request_index_delete_view(index=index)
'indexing:index_setup_delete', args=(index.pk,), follow=True
)
self.assertContains(response, text='deleted', status_code=200) self.assertEqual(response.status_code, 302)
self.assertEqual(Index.objects.count(), 0) 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): def test_index_edit_view_no_permission(self):
self.login_user() self.login_user()
@@ -80,34 +88,26 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
) )
response = self.post( response = self._request_index_edit_view(index=index)
'indexing:index_setup_edit', args=(index.pk,), data={
'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG
}
)
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
index = Index.objects.get(pk=index.pk) index = Index.objects.get(pk=index.pk)
self.assertEqual(index.label, TEST_INDEX_LABEL) 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.login_user()
self.role.permissions.add(
permission_document_indexing_edit.stored_permission
)
index = Index.objects.create( index = Index.objects.create(
label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG label=TEST_INDEX_LABEL, slug=TEST_INDEX_SLUG
) )
response = self.post( self.grant_access(
'indexing:index_setup_edit', args=(index.pk,), data={ permission=permission_document_indexing_edit,
'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG obj=index
}, follow=True
) )
index = Index.objects.get(pk=index.pk) response = self._request_index_edit_view(index=index)
self.assertContains(response, text='update', status_code=200) self.assertEqual(response.status_code, 302)
index.refresh_from_db()
self.assertEqual(index.label, TEST_INDEX_LABEL_EDITED) self.assertEqual(index.label, TEST_INDEX_LABEL_EDITED)
def create_test_index(self): def create_test_index(self):
@@ -129,28 +129,34 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
return index 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): def test_index_instance_node_view_no_permission(self):
index = self.create_test_index() index = self.create_test_index()
self.login_user() self.login_user()
response = self.get( response = self._request_index_instance_node_view(
'indexing:index_instance_node_view', args=(index.instance_root.pk,) index_instance_node=index.instance_root
) )
self.assertEqual(response.status_code, 403) 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() index = self.create_test_index()
self.login_user() self.login_user()
self.role.permissions.add( self.grant_access(
permission_document_indexing_view.stored_permission permission=permission_document_indexing_instance_view,
obj=index
) )
response = self.get( response = self._request_index_instance_node_view(
'indexing:index_instance_node_view', args=(index.instance_root.pk,) index_instance_node=index.instance_root
) )
self.assertContains(response, text=TEST_INDEX_LABEL, status_code=200) self.assertContains(response, text=TEST_INDEX_LABEL, status_code=200)
+6 -5
View File
@@ -22,8 +22,9 @@ from .models import (
) )
from .permissions import ( from .permissions import (
permission_document_indexing_create, permission_document_indexing_delete, permission_document_indexing_create, permission_document_indexing_delete,
permission_document_indexing_edit, permission_document_indexing_rebuild, permission_document_indexing_edit,
permission_document_indexing_view permission_document_indexing_instance_view,
permission_document_indexing_rebuild, permission_document_indexing_view
) )
from .tasks import task_rebuild_index from .tasks import task_rebuild_index
from .widgets import node_tree from .widgets import node_tree
@@ -211,7 +212,7 @@ class TemplateNodeEditView(SingleObjectEditView):
class IndexListView(SingleObjectListView): class IndexListView(SingleObjectListView):
object_permission = permission_document_indexing_view object_permission = permission_document_indexing_instance_view
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -233,7 +234,7 @@ class IndexInstanceNodeView(DocumentListView):
) )
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_indexing_view, permissions=permission_document_indexing_instance_view,
user=request.user, obj=self.index_instance_node.index() 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 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' object_permission_related = 'index'
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):