Add support for preserving the extension of document files when using the quick label feature. Added to the document properties edit view and the document upload view. Closes GitLab issue #360.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-09-05 04:06:13 -04:00
parent aac0852128
commit 435fa774f0
10 changed files with 145 additions and 29 deletions
+32 -5
View File
@@ -1,6 +1,7 @@
from __future__ import absolute_import, unicode_literals
import logging
import os
from django import forms
from django.template.defaultfilters import filesizeformat
@@ -99,16 +100,42 @@ class DocumentForm(forms.ModelForm):
}
)
)
self.fields['preserve_extension'] = forms.BooleanField(
label=_('Preserve extension'), required=False,
help_text=_(
'Takes the file extension and moves it to the end of the '
'filename allowing operating systems that rely on file '
'extensions to open document correctly.'
)
)
def clean(self):
if 'document_type_available_filenames' in self.cleaned_data:
if self.cleaned_data['document_type_available_filenames']:
self.cleaned_data['label'] = self.cleaned_data[
'document_type_available_filenames'
]
self.cleaned_data['label'] = self.get_final_label(
# Fallback to the instance label if there is no label key or
# there is a label key and is an empty string
filename=self.cleaned_data.get('label') or self.instance.label
)
return self.cleaned_data
def get_final_label(self, filename):
if 'document_type_available_filenames' in self.cleaned_data:
if self.cleaned_data['document_type_available_filenames']:
if self.cleaned_data['preserve_extension']:
filename, extension = os.path.splitext(filename)
filename = '{}{}'.format(
self.cleaned_data[
'document_type_available_filenames'
].filename, extension
)
else:
filename = self.cleaned_data[
'document_type_available_filenames'
].filename
return filename
class DocumentPropertiesForm(DetailForm):
"""
+13 -3
View File
@@ -6,7 +6,10 @@ from django.conf import settings
from ..models import DocumentType
from .literals import TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_FILENAME
from .literals import (
TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_FILENAME,
TEST_DOCUMENT_TYPE_QUICK_LABEL
)
__all__ = ('DocumentTestMixin',)
@@ -16,7 +19,7 @@ class DocumentTestMixin(object):
auto_upload_document = True
test_document_filename = TEST_SMALL_DOCUMENT_FILENAME
def create_document_type(self):
def _create_document_type(self):
self.document_type = DocumentType.objects.create(
label=TEST_DOCUMENT_TYPE_LABEL
)
@@ -36,7 +39,7 @@ class DocumentTestMixin(object):
)
if self.auto_create_document_type:
self.create_document_type()
self._create_document_type()
if self.auto_upload_document:
self.document = self.upload_document()
@@ -45,3 +48,10 @@ class DocumentTestMixin(object):
for document_type in DocumentType.objects.all():
document_type.delete()
super(DocumentTestMixin, self).tearDown()
class DocumentTypeQuickLabelTestMixin(object):
def _create_quick_label(self):
self.document_type_filename = self.document_type.filenames.create(
filename=TEST_DOCUMENT_TYPE_QUICK_LABEL
)
@@ -14,6 +14,7 @@ from .literals import (
TEST_DOCUMENT_TYPE_LABEL, TEST_DOCUMENT_TYPE_LABEL_EDITED,
TEST_DOCUMENT_TYPE_QUICK_LABEL, TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED
)
from .mixins import DocumentTypeQuickLabelTestMixin
class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
@@ -98,7 +99,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
)
class DocumentTypeQuickLabelViewsTestCase(GenericDocumentViewTestCase):
class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericDocumentViewTestCase):
def setUp(self):
super(DocumentTypeQuickLabelViewsTestCase, self).setUp()
self.login_user()
@@ -130,11 +131,6 @@ class DocumentTypeQuickLabelViewsTestCase(GenericDocumentViewTestCase):
self.assertEqual(self.document_type.filenames.count(), 1)
def _create_quick_label(self):
self.document_type_filename = self.document_type.filenames.create(
filename=TEST_DOCUMENT_TYPE_QUICK_LABEL
)
def _request_quick_label_delete(self):
return self.post(
viewname='documents:document_type_filename_delete',
@@ -2,6 +2,8 @@
from __future__ import unicode_literals
import os
from django.contrib.contenttypes.models import ContentType
from django.utils.encoding import force_text
@@ -22,6 +24,7 @@ from .literals import (
TEST_DOCUMENT_TYPE_2_LABEL, TEST_SMALL_DOCUMENT_FILENAME,
TEST_TRANSFORMATION_ARGUMENT, TEST_TRANSFORMATION_NAME,
)
from .mixins import DocumentTypeQuickLabelTestMixin
class DocumentsViewsTestCase(GenericDocumentViewTestCase):
@@ -558,3 +561,74 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
)
response = self._request_print_view()
self.assertEqual(response.status_code, 200)
class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericDocumentViewTestCase):
def setUp(self):
super(DocumentsQuickLabelViewsTestCase, self).setUp()
self.login_user()
def _request_document_quick_label_edit_view(self, extra_data=None):
data = {
'document_type_available_filenames': self.document_type_filename.pk,
'label': '' # View needs at least an empty label for quick
# label to work. Cause is unknown.
}
data.update(extra_data or {})
return self.post(
viewname='documents:document_edit', args=(self.document.pk,),
data=data
)
def test_document_quick_label_no_permission(self):
self._create_quick_label()
response = self._request_document_quick_label_edit_view()
self.assertEqual(response.status_code, 403)
self.document.refresh_from_db()
def test_document_quick_label_with_access(self):
self._create_quick_label()
self.grant_access(
permission=permission_document_properties_edit, obj=self.document
)
response = self._request_document_quick_label_edit_view()
self.assertEqual(response.status_code, 302)
self.document.refresh_from_db()
self.assertEqual(
self.document.label, self.document_type_filename.filename
)
def test_document_quick_label_preserve_extension_with_access(self):
self._create_quick_label()
self.grant_access(
permission=permission_document_properties_edit, obj=self.document
)
filename, extension = os.path.splitext(self.document.label)
response = self._request_document_quick_label_edit_view(
extra_data={'preserve_extension': True}
)
self.assertEqual(response.status_code, 302)
self.document.refresh_from_db()
self.assertEqual(
self.document.label, '{}{}'.format(
self.document_type_filename.filename, extension
)
)
def test_document_quick_label_no_preserve_extension_with_access(self):
self._create_quick_label()
self.grant_access(
permission=permission_document_properties_edit, obj=self.document
)
filename, extension = os.path.splitext(self.document.label)
response = self._request_document_quick_label_edit_view(
extra_data={'preserve_extension': False}
)
self.assertEqual(response.status_code, 302)
self.document.refresh_from_db()
self.assertEqual(
self.document.label, self.document_type_filename.filename
)
@@ -95,7 +95,9 @@ class DocumentVersionDownloadFormView(DocumentDownloadFormView):
DocumentVersionDownloadFormView, self
).get_extra_context()
result['title'] = _('Download document version')
result.update({
'title': _('Download document version'),
})
return result