~ubuntu-branches/debian/sid/python-django/sid

« back to all changes in this revision

Viewing changes to tests/view_tests/tests/test_static.py

  • Committer: Package Import Robot
  • Author(s): Luke Faraone
  • Date: 2013-11-07 15:33:49 UTC
  • mfrom: (1.3.12)
  • Revision ID: package-import@ubuntu.com-20131107153349-e31sc149l2szs3jb
Tags: 1.6-1
* New upstream version. Closes: #557474, #724637.
* python-django now also suggests the installation of ipython,
  bpython, python-django-doc, and libgdal1.
  Closes: #636511, #686333, #704203
* Set package maintainer to Debian Python Modules Team.
* Bump standards version to 3.9.5, no changes needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from __future__ import absolute_import
 
2
 
 
3
import mimetypes
 
4
from os import path
 
5
import unittest
 
6
 
 
7
from django.conf.urls.static import static
 
8
from django.http import HttpResponseNotModified
 
9
from django.test import TestCase
 
10
from django.test.utils import override_settings
 
11
from django.utils.http import http_date
 
12
from django.views.static import was_modified_since
 
13
 
 
14
from .. import urls
 
15
from ..urls import media_dir
 
16
 
 
17
 
 
18
@override_settings(DEBUG=True)
 
19
class StaticTests(TestCase):
 
20
    """Tests django views in django/views/static.py"""
 
21
 
 
22
    prefix = 'site_media'
 
23
 
 
24
    def test_serve(self):
 
25
        "The static view can serve static media"
 
26
        media_files = ['file.txt', 'file.txt.gz']
 
27
        for filename in media_files:
 
28
            response = self.client.get('/views/%s/%s' % (self.prefix, filename))
 
29
            response_content = b''.join(response)
 
30
            file_path = path.join(media_dir, filename)
 
31
            with open(file_path, 'rb') as fp:
 
32
                self.assertEqual(fp.read(), response_content)
 
33
            self.assertEqual(len(response_content), int(response['Content-Length']))
 
34
            self.assertEqual(mimetypes.guess_type(file_path)[1], response.get('Content-Encoding', None))
 
35
 
 
36
    def test_unknown_mime_type(self):
 
37
        response = self.client.get('/views/%s/file.unknown' % self.prefix)
 
38
        self.assertEqual('application/octet-stream', response['Content-Type'])
 
39
 
 
40
    def test_copes_with_empty_path_component(self):
 
41
        file_name = 'file.txt'
 
42
        response = self.client.get('/views/%s//%s' % (self.prefix, file_name))
 
43
        response_content = b''.join(response)
 
44
        with open(path.join(media_dir, file_name), 'rb') as fp:
 
45
            self.assertEqual(fp.read(), response_content)
 
46
 
 
47
    def test_is_modified_since(self):
 
48
        file_name = 'file.txt'
 
49
        response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
 
50
            HTTP_IF_MODIFIED_SINCE='Thu, 1 Jan 1970 00:00:00 GMT')
 
51
        response_content = b''.join(response)
 
52
        with open(path.join(media_dir, file_name), 'rb') as fp:
 
53
            self.assertEqual(fp.read(), response_content)
 
54
 
 
55
    def test_not_modified_since(self):
 
56
        file_name = 'file.txt'
 
57
        response = self.client.get(
 
58
            '/views/%s/%s' % (self.prefix, file_name),
 
59
            HTTP_IF_MODIFIED_SINCE='Mon, 18 Jan 2038 05:14:07 GMT'
 
60
            # This is 24h before max Unix time. Remember to fix Django and
 
61
            # update this test well before 2038 :)
 
62
            )
 
63
        self.assertIsInstance(response, HttpResponseNotModified)
 
64
 
 
65
    def test_invalid_if_modified_since(self):
 
66
        """Handle bogus If-Modified-Since values gracefully
 
67
 
 
68
        Assume that a file is modified since an invalid timestamp as per RFC
 
69
        2616, section 14.25.
 
70
        """
 
71
        file_name = 'file.txt'
 
72
        invalid_date = 'Mon, 28 May 999999999999 28:25:26 GMT'
 
73
        response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
 
74
                                   HTTP_IF_MODIFIED_SINCE=invalid_date)
 
75
        response_content = b''.join(response)
 
76
        with open(path.join(media_dir, file_name), 'rb') as fp:
 
77
            self.assertEqual(fp.read(), response_content)
 
78
        self.assertEqual(len(response_content),
 
79
                          int(response['Content-Length']))
 
80
 
 
81
    def test_invalid_if_modified_since2(self):
 
82
        """Handle even more bogus If-Modified-Since values gracefully
 
83
 
 
84
        Assume that a file is modified since an invalid timestamp as per RFC
 
85
        2616, section 14.25.
 
86
        """
 
87
        file_name = 'file.txt'
 
88
        invalid_date = ': 1291108438, Wed, 20 Oct 2010 14:05:00 GMT'
 
89
        response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
 
90
                                   HTTP_IF_MODIFIED_SINCE=invalid_date)
 
91
        response_content = b''.join(response)
 
92
        with open(path.join(media_dir, file_name), 'rb') as fp:
 
93
            self.assertEqual(fp.read(), response_content)
 
94
        self.assertEqual(len(response_content),
 
95
                          int(response['Content-Length']))
 
96
 
 
97
 
 
98
class StaticHelperTest(StaticTests):
 
99
    """
 
100
    Test case to make sure the static URL pattern helper works as expected
 
101
    """
 
102
    def setUp(self):
 
103
        super(StaticHelperTest, self).setUp()
 
104
        self._old_views_urlpatterns = urls.urlpatterns[:]
 
105
        urls.urlpatterns += static('/media/', document_root=media_dir)
 
106
 
 
107
    def tearDown(self):
 
108
        super(StaticHelperTest, self).tearDown()
 
109
        urls.urlpatterns = self._old_views_urlpatterns
 
110
 
 
111
 
 
112
class StaticUtilsTests(unittest.TestCase):
 
113
    def test_was_modified_since_fp(self):
 
114
        """
 
115
        Test that a floating point mtime does not disturb was_modified_since.
 
116
        (#18675)
 
117
        """
 
118
        mtime = 1343416141.107817
 
119
        header = http_date(mtime)
 
120
        self.assertFalse(was_modified_since(header, mtime))