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:
@@ -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={
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user