1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
from __future__ import absolute_import
import re
import string
import time
import django
from django.conf import settings
from django.test import TestCase
from django.utils.http import http_date
# Original snippet from http://djangosnippets.org/snippets/2156/
class SettingDoesNotExist:
pass
def switch_settings(**kwargs):
"""Helper method that updates settings and returns old settings."""
old_settings = {}
for key, new_value in kwargs.items():
old_value = getattr(settings, key, SettingDoesNotExist)
old_settings[key] = old_value
if new_value is SettingDoesNotExist:
delattr(settings, key)
else:
setattr(settings, key, new_value)
return old_settings
# end snippet
class patch_settings(object):
def __init__(self, **kwargs):
super(patch_settings, self).__init__()
self.marker = object()
self.old_settings = {}
self.kwargs = kwargs
def start(self):
for setting, new_value in self.kwargs.items():
old_value = getattr(settings, setting, self.marker)
self.old_settings[setting] = old_value
setattr(settings, setting, new_value)
def stop(self):
for setting, old_value in self.old_settings.items():
if old_value is self.marker:
delattr(settings, setting)
else:
setattr(settings, setting, old_value)
def __enter__(self):
self.start()
def __exit__(self, exc_type, exc_val, exc_tb):
self.stop()
class CsrfMiddlewareEnabledTestCase(TestCase):
def setUp(self):
super(CsrfMiddlewareEnabledTestCase, self).setUp()
if django.VERSION[:2] > (1, 3):
csrf_middleware = 'django.middleware.csrf.CsrfViewMiddleware'
else:
csrf_middleware = 'django.contrib.csrf.middleware.CsrfMiddleware'
# make sure csrf middleware is enabled
self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
settings.MIDDLEWARE_CLASSES = [
'django.middleware.common.CommonMiddleware',
csrf_middleware,
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
]
def tearDown(self):
settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
super(CsrfMiddlewareEnabledTestCase, self).tearDown()
def get_csrf_token(self, response):
# get csrf token
csrf_token_re = re.compile(r"name='csrfmiddlewaretoken' value='(.*)'")
match = re.search(csrf_token_re, response.content)
token = match.group(1)
return token
class NeverCacheTestCase(TestCase):
def is_cacheable(self, response):
result = True
if 'Expires'in response:
expires = response['Expires']
now = http_date(time.time())
result &= expires > now
if 'Cache-Control' in response:
cache_control = response['Cache-Control']
values = map(string.strip, cache_control.split(','))
for value in values:
if '=' in value:
k, v = value.split('=')
if k == 'max-age':
result &= int(v) > 0
break
return result
|