Add new document version list view permission. GitLab issue #379
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
3.0 (2017-XX-XX)
|
||||
================
|
||||
- Metadat widget appearance changes
|
||||
- Content windows appearance changes
|
||||
- Add new document's version list view permission
|
||||
|
||||
2.2 (2017-04-26)
|
||||
================
|
||||
- Remove the installation app (GitLab #301).
|
||||
|
||||
@@ -12,6 +12,7 @@ Other changes
|
||||
-------------
|
||||
- Metadat widget appearance changes
|
||||
- Content windows appearance changes
|
||||
- Add new document's version list view permission
|
||||
|
||||
Removals
|
||||
--------
|
||||
@@ -71,5 +72,7 @@ Bugs fixed or issues closed
|
||||
===========================
|
||||
|
||||
* `GitLab issue #378 <https://gitlab.com/mayan-edms/mayan-edms/issues/378>`_ Add metadata widget changes from @Macrobb
|
||||
* `GitLab issue #379 <https://gitlab.com/mayan-edms/mayan-edms/issues/379>`_ Add new document version list view permission.
|
||||
|
||||
|
||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||
|
||||
@@ -24,7 +24,7 @@ from .permissions import (
|
||||
permission_document_restore, permission_document_trash,
|
||||
permission_document_view, permission_document_type_create,
|
||||
permission_document_type_delete, permission_document_type_edit,
|
||||
permission_document_type_view
|
||||
permission_document_type_view, permission_document_version_view
|
||||
)
|
||||
from .runtime import cache_storage_backend
|
||||
from .serializers import (
|
||||
@@ -500,7 +500,7 @@ class APIDocumentVersionsListView(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
mayan_object_permissions = {
|
||||
'GET': (permission_document_view,),
|
||||
'GET': (permission_document_version_view,),
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
mayan_view_permissions = {'POST': (permission_document_new_version,)}
|
||||
|
||||
@@ -14,7 +14,8 @@ from .permissions import (
|
||||
permission_document_version_revert, permission_document_view,
|
||||
permission_document_trash, permission_document_type_create,
|
||||
permission_document_type_delete, permission_document_type_edit,
|
||||
permission_document_type_view, permission_empty_trash
|
||||
permission_document_type_view, permission_empty_trash,
|
||||
permission_document_version_view
|
||||
)
|
||||
from .settings import setting_zoom_max_level, setting_zoom_min_level
|
||||
|
||||
@@ -58,7 +59,7 @@ link_document_properties = Link(
|
||||
args='resolved_object.id'
|
||||
)
|
||||
link_document_version_list = Link(
|
||||
icon='fa fa-code-fork', permissions=(permission_document_view,),
|
||||
icon='fa fa-code-fork', permissions=(permission_document_version_view,),
|
||||
text=_('Versions'), view='documents:document_version_list',
|
||||
args='resolved_object.pk'
|
||||
)
|
||||
|
||||
@@ -40,6 +40,10 @@ permission_document_version_revert = namespace.add_permission(
|
||||
name='document_version_revert',
|
||||
label=_('Revert documents to a previous version')
|
||||
)
|
||||
permission_document_version_view = namespace.add_permission(
|
||||
name='document_version_view',
|
||||
label=_('View documents\' versions list')
|
||||
)
|
||||
permission_document_view = namespace.add_permission(
|
||||
name='document_view', label=_('View documents')
|
||||
)
|
||||
|
||||
@@ -75,3 +75,4 @@ TEST_SMALL_DOCUMENT_PATH = os.path.join(
|
||||
settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib',
|
||||
'sample_documents', TEST_SMALL_DOCUMENT_FILENAME
|
||||
)
|
||||
TEST_VERSION_COMMENT = 'test version comment'
|
||||
|
||||
@@ -213,6 +213,32 @@ class DocumentAPITestCase(BaseAPITestCase):
|
||||
|
||||
self.assertEqual(document.versions.first(), document.latest_version)
|
||||
|
||||
def test_document_version_list(self):
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
document = self.document_type.new_document(
|
||||
file_object=file_object,
|
||||
)
|
||||
|
||||
# Needed by MySQL as milliseconds value is not store in timestamp field
|
||||
time.sleep(1)
|
||||
|
||||
with open(TEST_DOCUMENT_PATH) as file_object:
|
||||
document.new_version(file_object=file_object)
|
||||
|
||||
self.assertEqual(document.versions.count(), 2)
|
||||
|
||||
last_version = document.versions.last()
|
||||
|
||||
response = self.client.get(
|
||||
reverse(
|
||||
'rest_api:document-version-list',
|
||||
args=(document.pk,)
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
response.data['results'][1]['checksum'], last_version.checksum
|
||||
)
|
||||
|
||||
def test_document_download(self):
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
document = self.document_type.new_document(
|
||||
|
||||
@@ -20,12 +20,14 @@ from ..permissions import (
|
||||
permission_document_trash, permission_document_type_create,
|
||||
permission_document_type_delete, permission_document_type_edit,
|
||||
permission_document_type_view, permission_document_version_revert,
|
||||
permission_document_view, permission_empty_trash
|
||||
permission_document_view, permission_empty_trash,
|
||||
permission_document_version_view
|
||||
)
|
||||
|
||||
from .literals import (
|
||||
TEST_DOCUMENT_TYPE, TEST_DOCUMENT_TYPE_QUICK_LABEL,
|
||||
TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH
|
||||
TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH,
|
||||
TEST_VERSION_COMMENT
|
||||
)
|
||||
|
||||
|
||||
@@ -432,39 +434,6 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertEqual(DeletedDocument.objects.count(), 0)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
|
||||
def test_document_version_revert_no_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_revert', args=(first_version.pk,)
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(self.document.versions.count(), 2)
|
||||
|
||||
def test_document_version_revert_with_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
self.grant(permission=permission_document_version_revert)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_revert', args=(first_version.pk,),
|
||||
follow=True
|
||||
)
|
||||
|
||||
self.assertContains(response, 'reverted', status_code=200)
|
||||
self.assertEqual(self.document.versions.count(), 1)
|
||||
|
||||
def test_document_page_view_no_permissions(self):
|
||||
response = self.get(
|
||||
'documents:document_page_view', args=(
|
||||
@@ -644,6 +613,73 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertEqual(self.document_type.filenames.count(), 1)
|
||||
|
||||
|
||||
class DocumentVersionTestCase(GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentVersionTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
def test_document_version_list_no_permission(self):
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
comment=TEST_VERSION_COMMENT, file_object=file_object
|
||||
)
|
||||
|
||||
response = self.get(
|
||||
'documents:document_version_list', args=(self.document.pk,)
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_document_version_list_with_permission(self):
|
||||
self.grant(permission=permission_document_version_view)
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
comment=TEST_VERSION_COMMENT, file_object=file_object
|
||||
)
|
||||
|
||||
response = self.get(
|
||||
'documents:document_version_list', args=(self.document.pk,)
|
||||
)
|
||||
|
||||
self.assertContains(response, TEST_VERSION_COMMENT, status_code=200)
|
||||
|
||||
def test_document_version_revert_no_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_revert', args=(first_version.pk,)
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(self.document.versions.count(), 2)
|
||||
|
||||
def test_document_version_revert_with_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
self.grant(permission=permission_document_version_revert)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_revert', args=(first_version.pk,),
|
||||
follow=True
|
||||
)
|
||||
|
||||
self.assertContains(response, 'reverted', status_code=200)
|
||||
self.assertEqual(self.document.versions.count(), 1)
|
||||
|
||||
|
||||
|
||||
|
||||
class DeletedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(DeletedDocumentTestCase, self).setUp()
|
||||
|
||||
@@ -12,7 +12,7 @@ from common.generics import ConfirmView, SingleObjectListView
|
||||
from ..models import Document, DocumentVersion
|
||||
from ..permissions import (
|
||||
permission_document_download, permission_document_version_revert,
|
||||
permission_document_view
|
||||
permission_document_version_view, permission_document_view
|
||||
)
|
||||
|
||||
from .document_views import DocumentDownloadFormView, DocumentDownloadView
|
||||
@@ -23,7 +23,7 @@ logger = logging.getLogger(__name__)
|
||||
class DocumentVersionListView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_document_view, user=request.user,
|
||||
permissions=permission_document_version_view, user=request.user,
|
||||
obj=self.get_document()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user