mirror of
https://github.com/jazzband/django-downloadview.git
synced 2026-03-16 22:40:25 +00:00
Psycho-rebased work of @benesch and @zerc on top of master.
This commit is contained in:
commit
bdf8e6e368
3 changed files with 34 additions and 2 deletions
|
|
@ -1,7 +1,9 @@
|
|||
import datetime
|
||||
import unittest
|
||||
|
||||
from django.core.files.base import ContentFile
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http.response import HttpResponseNotModified
|
||||
import django.test
|
||||
|
||||
from django_downloadview import assert_download_response, temporary_media_root
|
||||
|
|
@ -31,6 +33,32 @@ class StaticPathTestCase(django.test.TestCase):
|
|||
basename='1.txt',
|
||||
mime_type='text/plain')
|
||||
|
||||
@temporary_media_root()
|
||||
def test_not_modified_download_response(self):
|
||||
"""'storage:static_path' sends not modified response if unmodified."""
|
||||
setup_file('1.txt')
|
||||
url = reverse('storage:static_path', kwargs={'path': '1.txt'})
|
||||
response = self.client.get(
|
||||
url,
|
||||
HTTP_IF_MODIFIED_SINCE='Sat, 29 Oct {year} 19:43:31 GMT'.format(
|
||||
year=datetime.date.today().year + 4)
|
||||
)
|
||||
self.assertTrue(isinstance(response, HttpResponseNotModified))
|
||||
|
||||
@temporary_media_root()
|
||||
def test_modified_since_download_response(self):
|
||||
"""'storage:static_path' streams file if modified."""
|
||||
setup_file('1.txt')
|
||||
url = reverse('storage:static_path', kwargs={'path': '1.txt'})
|
||||
response = self.client.get(
|
||||
url,
|
||||
HTTP_IF_MODIFIED_SINCE='Sat, 29 Oct 1980 19:43:31 GMT')
|
||||
assert_download_response(self,
|
||||
response,
|
||||
content=file_content,
|
||||
basename='1.txt',
|
||||
mime_type='text/plain')
|
||||
|
||||
|
||||
class DynamicPathIntegrationTestCase(django.test.TestCase):
|
||||
"""Integration tests around ``storage:dynamic_path`` URL."""
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Base material for download views: :class:`DownloadMixin` and
|
||||
:class:`BaseDownloadView`"""
|
||||
import calendar
|
||||
|
||||
from django.http import HttpResponseNotModified, Http404
|
||||
from django.views.generic.base import View
|
||||
from django.views.static import was_modified_since
|
||||
|
|
@ -111,7 +113,8 @@ class DownloadMixin(object):
|
|||
return file_instance.was_modified_since(since)
|
||||
except (AttributeError, NotImplementedError):
|
||||
try:
|
||||
modification_time = file_instance.modified_time
|
||||
modification_time = calendar.timegm(
|
||||
file_instance.modified_time.utctimetuple())
|
||||
size = file_instance.size
|
||||
except (AttributeError, NotImplementedError):
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
"""Tests around :mod:`django_downloadview.views`."""
|
||||
import os
|
||||
import unittest
|
||||
from datetime import datetime
|
||||
try:
|
||||
from unittest import mock
|
||||
except ImportError:
|
||||
|
|
@ -92,7 +93,7 @@ class DownloadMixinTestCase(unittest.TestCase):
|
|||
file_wrapper.was_modified_since = mock.Mock(
|
||||
side_effect=AttributeError)
|
||||
file_wrapper.size = mock.sentinel.size
|
||||
file_wrapper.modified_time = mock.sentinel.modified_time
|
||||
file_wrapper.modified_time = datetime.now()
|
||||
was_modified_since_mock = mock.Mock(
|
||||
return_value=mock.sentinel.was_modified)
|
||||
mixin = views.DownloadMixin()
|
||||
|
|
|
|||
Loading…
Reference in a new issue