Refactor and implement download code natively

- Use modified port of Django 2.2 FileResponse.
- Remove Django DownloadView library.

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-12-12 19:38:12 -04:00
parent 826f7fddf2
commit a7b31fc171
24 changed files with 355 additions and 278 deletions

View File

@@ -204,13 +204,20 @@ class DocumentViewTestMixin(object):
}
)
def _request_document_download_form_view(self):
def _request_document_download_form_get_view(self):
return self.get(
viewname='documents:document_download_form', kwargs={
'pk': self.test_document.pk
}
)
def _request_document_download_form_post_view(self):
return self.post(
viewname='documents:document_download_form', kwargs={
'pk': self.test_document.pk
}
)
def _request_document_download_view(self):
return self.get(
viewname='documents:document_download', kwargs={

View File

@@ -4,7 +4,6 @@ import time
from django.utils.encoding import force_text
from django_downloadview import assert_download_response
from rest_framework import status
from mayan.apps.rest_api.tests.base import BaseAPITestCase
@@ -213,12 +212,10 @@ class DocumentAPIViewTestCase(
self.assertEqual(response.status_code, status.HTTP_200_OK)
with self.test_document.open() as file_object:
assert_download_response(
self, response, content=file_object.read(),
basename=TEST_SMALL_DOCUMENT_FILENAME,
mime_type='{}; charset=utf-8'.format(
self.test_document.file_mimetype
)
self.assert_download_response(
response=response, content=file_object.read(),
filename=TEST_SMALL_DOCUMENT_FILENAME,
mime_type=self.test_document.file_mimetype
)
def test_document_api_upload_view_no_permission(self):
@@ -418,12 +415,10 @@ class DocumentVersionAPIViewTestCase(
self.assertEqual(response.status_code, status.HTTP_200_OK)
with self.test_document.latest_version.open() as file_object:
assert_download_response(
self, response, content=file_object.read(),
basename=force_text(self.test_document.latest_version),
mime_type='{}; charset=utf-8'.format(
self.test_document.file_mimetype
)
self.assert_download_response(
response=response, content=file_object.read(),
filename=force_text(self.test_document.latest_version),
mime_type=self.test_document.file_mimetype
)
def test_document_version_api_download_preserve_extension_view(self):
@@ -440,13 +435,11 @@ class DocumentVersionAPIViewTestCase(
)
with self.test_document.latest_version.open() as file_object:
assert_download_response(
self, response, content=file_object.read(),
basename=self.test_document.latest_version.get_rendered_string(
self.assert_download_response(
response=response, content=file_object.read(),
filename=self.test_document.latest_version.get_rendered_string(
preserve_extension=True
), mime_type='{}; charset=utf-8'.format(
self.test_document.file_mimetype
)
), mime_type=self.test_document.file_mimetype
)
def test_document_version_api_list_view_no_permission(self):

View File

@@ -166,33 +166,40 @@ class DocumentViewTestCase(
Document.objects.first().document_type, document_type_2
)
def test_document_download_form_view_no_permission(self):
response = self._request_document_download_form_view()
self.assertNotContains(
response=response, text=self.test_document.label, status_code=200
)
def test_document_download_form_get_view_no_permission(self):
response = self._request_document_download_form_get_view()
self.assertEqual(response.status_code, 404)
def test_document_download_form_view_with_access(self):
def test_document_download_form_get_view_with_access(self):
self.grant_access(
obj=self.test_document, permission=permission_document_download
)
response = self._request_document_download_form_view()
response = self._request_document_download_form_get_view()
self.assertContains(
response=response, text=self.test_document.label, status_code=200
)
def test_document_download_form_post_view_no_permission(self):
response = self._request_document_download_form_post_view()
self.assertEqual(response.status_code, 404)
def test_document_download_form_post_view_with_access(self):
self.grant_access(
obj=self.test_document, permission=permission_document_download
)
response = self._request_document_download_form_post_view()
self.assertEqual(response.status_code, 302)
def test_document_download_view_no_permission(self):
response = self._request_document_download_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_download_view_with_permission(self):
# Set the expected_content_types for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_types = (
'{}; charset=utf-8'.format(
self.test_document.file_mimetype
),
self.test_document.file_mimetype,
)
self.grant_access(
@@ -205,21 +212,19 @@ class DocumentViewTestCase(
with self.test_document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=TEST_SMALL_DOCUMENT_FILENAME,
filename=TEST_SMALL_DOCUMENT_FILENAME,
mime_type=self.test_document.file_mimetype
)
def test_document_multiple_download_view_no_permission(self):
response = self._request_document_multiple_download_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_multiple_download_view_with_permission(self):
# Set the expected_content_types for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_types = (
'{}; charset=utf-8'.format(
self.test_document.file_mimetype
),
self.test_document.file_mimetype,
)
self.grant_access(
obj=self.test_document, permission=permission_document_download
@@ -231,21 +236,19 @@ class DocumentViewTestCase(
with self.test_document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=TEST_SMALL_DOCUMENT_FILENAME,
filename=TEST_SMALL_DOCUMENT_FILENAME,
mime_type=self.test_document.file_mimetype
)
def test_document_version_download_view_no_permission(self):
response = self._request_document_version_download()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_version_download_view_with_permission(self):
# Set the expected_content_types for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_types = (
'{}; charset=utf-8'.format(
self.test_document.latest_version.mimetype
),
self.test_document.latest_version.mimetype,
)
self.grant_access(
@@ -258,19 +261,15 @@ class DocumentViewTestCase(
with self.test_document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=force_text(self.test_document.latest_version),
mime_type='{}; charset=utf-8'.format(
self.test_document.latest_version.mimetype
)
filename=force_text(self.test_document.latest_version),
mime_type=self.test_document.latest_version.mimetype
)
def test_document_version_download_preserve_extension_view_with_permission(self):
# Set the expected_content_types for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_types = (
'{}; charset=utf-8'.format(
self.test_document.latest_version.mimetype
),
self.test_document.latest_version.mimetype,
)
self.grant_access(
@@ -285,11 +284,9 @@ class DocumentViewTestCase(
with self.test_document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=self.test_document.latest_version.get_rendered_string(
filename=self.test_document.latest_version.get_rendered_string(
preserve_extension=True
), mime_type='{}; charset=utf-8'.format(
self.test_document.latest_version.mimetype
)
), mime_type=self.test_document.latest_version.mimetype
)
def test_document_update_page_count_view_no_permission(self):

View File

@@ -1,7 +1,6 @@
from __future__ import unicode_literals
from actstream.models import Action
from django_downloadview import assert_download_response
from ..events import (
event_document_download, event_document_trashed, event_document_view
@@ -45,11 +44,11 @@ class DocumentEventsTestCase(
def test_document_download_event_no_permission(self):
response = self._request_test_document_download_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(list(Action.objects.any(obj=self.test_document)), [])
def test_document_download_event_with_access(self):
self.expected_content_types = ('image/png; charset=utf-8',)
self.expected_content_types = ('image/png',)
self.grant_access(
obj=self.test_document, permission=permission_document_download
@@ -59,8 +58,8 @@ class DocumentEventsTestCase(
# Download the file to close the file descriptor
with self.test_document.open() as file_object:
assert_download_response(
self, response, content=file_object.read(),
self.assert_download_response(
response=response, content=file_object.read(),
mime_type=self.test_document.file_mimetype
)