3434# functions/classes for complex data type tests
3535def f ():
3636 return 42
37+
3738class C :
3839 def m (n ):
3940 return 24
4041
42+
4143class DummyCacheTests (unittest .TestCase ):
4244 # The Dummy cache backend doesn't really behave like a test backend,
4345 # so it has different test requirements.
@@ -737,10 +739,12 @@ def test_custom_key_func(self):
737739 self .assertEqual (self .custom_key_cache .get ('answer2' ), 42 )
738740 self .assertEqual (self .custom_key_cache2 .get ('answer2' ), 42 )
739741
742+
740743def custom_key_func (key , key_prefix , version ):
741744 "A customized cache key function"
742745 return 'CUSTOM-' + '-' .join ([key_prefix , str (version ), key ])
743746
747+
744748class DBCacheTests (unittest .TestCase , BaseCacheTests ):
745749 backend_name = 'django.core.cache.backends.db.DatabaseCache'
746750
@@ -818,6 +822,7 @@ def test_multiple_caches(self):
818822 self .assertEqual (mirror_cache .get ('value1' ), 42 )
819823 self .assertEqual (other_cache .get ('value1' ), None )
820824
825+
821826# memcached backend isn't guaranteed to be available.
822827# To check the memcached backend, the test settings file will
823828# need to contain a cache backend setting that points at
@@ -853,6 +858,7 @@ def test_invalid_keys(self):
853858
854859MemcachedCacheTests = unittest .skipUnless (settings .CACHES [DEFAULT_CACHE_ALIAS ]['BACKEND' ].startswith ('django.core.cache.backends.memcached.' ), "memcached not available" )(MemcachedCacheTests )
855860
861+
856862class FileBasedCacheTests (unittest .TestCase , BaseCacheTests ):
857863 """
858864 Specific test cases for the file-based cache.
@@ -900,6 +906,7 @@ def test_old_initialization(self):
900906 self .cache = get_cache ('file://%s?max_entries=30' % self .dirname )
901907 self .perform_cull_test (50 , 29 )
902908
909+
903910class CustomCacheKeyValidationTests (unittest .TestCase ):
904911 """
905912 Tests for the ability to mixin a custom ``validate_key`` method to
@@ -933,22 +940,12 @@ def test_simple(self):
933940
934941 self .assertRaises (InvalidCacheBackendError , get_cache , 'does_not_exist' )
935942
943+
936944class CacheUtils (unittest .TestCase ):
937945 """TestCase for django.utils.cache functions."""
938946
939947 def setUp (self ):
940948 self .path = '/cache/test/'
941- self .old_cache_middleware_key_prefix = settings .CACHE_MIDDLEWARE_KEY_PREFIX
942- self .old_cache_middleware_seconds = settings .CACHE_MIDDLEWARE_SECONDS
943- self .orig_use_i18n = settings .USE_I18N
944- settings .CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
945- settings .CACHE_MIDDLEWARE_SECONDS = 1
946- settings .USE_I18N = False
947-
948- def tearDown (self ):
949- settings .CACHE_MIDDLEWARE_KEY_PREFIX = self .old_cache_middleware_key_prefix
950- settings .CACHE_MIDDLEWARE_SECONDS = self .old_cache_middleware_seconds
951- settings .USE_I18N = self .orig_use_i18n
952949
953950 def _get_request (self , path , method = 'GET' ):
954951 request = HttpRequest ()
@@ -1036,39 +1033,32 @@ def test_patch_cache_control(self):
10361033 parts = set (cc_delim_re .split (response ['Cache-Control' ]))
10371034 self .assertEqual (parts , expected_cc )
10381035
1039- class PrefixedCacheUtils (CacheUtils ):
1040- def setUp (self ):
1041- super (PrefixedCacheUtils , self ).setUp ()
1042- self .old_cache_key_prefix = settings .CACHES ['default' ].get ('KEY_PREFIX' , None )
1043- settings .CACHES ['default' ]['KEY_PREFIX' ] = 'cacheprefix'
1036+ CacheUtils = override_settings (
1037+ CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix' ,
1038+ CACHE_MIDDLEWARE_SECONDS = 1 ,
1039+ CACHES = {
1040+ 'default' : {
1041+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1042+ },
1043+ },
1044+ USE_I18N = False ,
1045+ )(CacheUtils )
1046+
1047+ PrefixedCacheUtils = override_settings (
1048+ CACHES = {
1049+ 'default' : {
1050+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1051+ 'KEY_PREFIX' : 'cacheprefix' ,
1052+ },
1053+ },
1054+ )(CacheUtils )
10441055
1045- def tearDown (self ):
1046- super (PrefixedCacheUtils , self ).tearDown ()
1047- if self .old_cache_key_prefix is None :
1048- del settings .CACHES ['default' ]['KEY_PREFIX' ]
1049- else :
1050- settings .CACHES ['default' ]['KEY_PREFIX' ] = self .old_cache_key_prefix
10511056
10521057class CacheHEADTest (unittest .TestCase ):
10531058
10541059 def setUp (self ):
1055- self .orig_cache_middleware_seconds = settings .CACHE_MIDDLEWARE_SECONDS
1056- self .orig_cache_middleware_key_prefix = settings .CACHE_MIDDLEWARE_KEY_PREFIX
1057- self .orig_caches = settings .CACHES
1058- settings .CACHE_MIDDLEWARE_SECONDS = 60
1059- settings .CACHE_MIDDLEWARE_KEY_PREFIX = 'test'
1060- settings .CACHES = {
1061- 'default' : {
1062- 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
1063- }
1064- }
10651060 self .path = '/cache/test/'
10661061
1067- def tearDown (self ):
1068- settings .CACHE_MIDDLEWARE_SECONDS = self .orig_cache_middleware_seconds
1069- settings .CACHE_MIDDLEWARE_KEY_PREFIX = self .orig_cache_middleware_key_prefix
1070- settings .CACHES = self .orig_caches
1071-
10721062 def _get_request (self , method ):
10731063 request = HttpRequest ()
10741064 request .META = {
@@ -1111,29 +1101,22 @@ def test_head_with_cached_get(self):
11111101 self .assertNotEqual (get_cache_data , None )
11121102 self .assertEqual (test_content , get_cache_data .content )
11131103
1104+ CacheHEADTest = override_settings (
1105+ CACHE_MIDDLEWARE_SECONDS = 60 ,
1106+ CACHE_MIDDLEWARE_KEY_PREFIX = 'test' ,
1107+ CACHES = {
1108+ 'default' : {
1109+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1110+ },
1111+ },
1112+ )(CacheHEADTest )
1113+
1114+
11141115class CacheI18nTest (unittest .TestCase ):
11151116
11161117 def setUp (self ):
1117- self .orig_cache_middleware_seconds = settings .CACHE_MIDDLEWARE_SECONDS
1118- self .orig_cache_middleware_key_prefix = settings .CACHE_MIDDLEWARE_KEY_PREFIX
1119- self .orig_caches = settings .CACHES
1120- self .orig_use_i18n = settings .USE_I18N
1121- self .orig_languages = settings .LANGUAGES
1122- settings .LANGUAGES = (
1123- ('en' , 'English' ),
1124- ('es' , 'Spanish' ),
1125- )
1126- settings .CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
11271118 self .path = '/cache/test/'
11281119
1129- def tearDown (self ):
1130- settings .CACHE_MIDDLEWARE_SECONDS = self .orig_cache_middleware_seconds
1131- settings .CACHE_MIDDLEWARE_KEY_PREFIX = self .orig_cache_middleware_key_prefix
1132- settings .CACHES = self .orig_caches
1133- settings .USE_I18N = self .orig_use_i18n
1134- settings .LANGUAGES = self .orig_languages
1135- translation .deactivate ()
1136-
11371120 def _get_request (self ):
11381121 request = HttpRequest ()
11391122 request .META = {
@@ -1158,8 +1141,8 @@ def _get_request_cache(self, query_string=None):
11581141 request .session = {}
11591142 return request
11601143
1144+ @override_settings (USE_I18N = True )
11611145 def test_cache_key_i18n (self ):
1162- settings .USE_I18N = True
11631146 request = self ._get_request ()
11641147 lang = translation .get_language ()
11651148 response = HttpResponse ()
@@ -1168,30 +1151,26 @@ def test_cache_key_i18n(self):
11681151 key2 = get_cache_key (request )
11691152 self .assertEqual (key , key2 )
11701153
1154+ @override_settings (USE_I18N = False )
11711155 def test_cache_key_no_i18n (self ):
1172- settings .USE_I18N = False
11731156 request = self ._get_request ()
11741157 lang = translation .get_language ()
11751158 response = HttpResponse ()
11761159 key = learn_cache_key (request , response )
11771160 self .assertFalse (key .endswith (lang ), "Cache keys shouldn't include the language name when i18n is inactive" )
11781161
1162+ @override_settings (
1163+ CACHE_MIDDLEWARE_KEY_PREFIX = "test" ,
1164+ CACHE_MIDDLEWARE_SECONDS = 60 ,
1165+ USE_ETAGS = True ,
1166+ USE_I18N = True ,
1167+ )
11791168 def test_middleware (self ):
11801169 def set_cache (request , lang , msg ):
1181- translation .activate (lang )
1182- response = HttpResponse ()
1183- response .content = msg
1184- return UpdateCacheMiddleware ().process_response (request , response )
1185-
1186- settings .CACHE_MIDDLEWARE_SECONDS = 60
1187- settings .CACHE_MIDDLEWARE_KEY_PREFIX = "test"
1188- settings .CACHES = {
1189- 'default' : {
1190- 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
1191- }
1192- }
1193- settings .USE_ETAGS = True
1194- settings .USE_I18N = True
1170+ with translation .override (lang ):
1171+ response = HttpResponse ()
1172+ response .content = msg
1173+ return UpdateCacheMiddleware ().process_response (request , response )
11951174
11961175 # cache with non empty request.GET
11971176 request = self ._get_request_cache (query_string = 'foo=bar&other=true' )
@@ -1224,74 +1203,56 @@ def set_cache(request, lang, msg):
12241203 # Check that we use etags
12251204 self .assertTrue (get_cache_data .has_header ('ETag' ))
12261205 # Check that we can disable etags
1227- settings . USE_ETAGS = False
1228- request ._cache_update_cache = True
1229- set_cache (request , 'en' , en_message )
1230- get_cache_data = FetchFromCacheMiddleware ().process_request (request )
1231- self .assertFalse (get_cache_data .has_header ('ETag' ))
1206+ with self . settings ( USE_ETAGS = False ):
1207+ request ._cache_update_cache = True
1208+ set_cache (request , 'en' , en_message )
1209+ get_cache_data = FetchFromCacheMiddleware ().process_request (request )
1210+ self .assertFalse (get_cache_data .has_header ('ETag' ))
12321211 # change the session language and set content
12331212 request = self ._get_request_cache ()
12341213 set_cache (request , 'es' , es_message )
12351214 # change again the language
1236- translation .activate ('en' )
1237- # retrieve the content from cache
1238- get_cache_data = FetchFromCacheMiddleware ().process_request (request )
1239- self .assertEqual (get_cache_data .content , en_message )
1215+ with translation .override ('en' ):
1216+ # retrieve the content from cache
1217+ get_cache_data = FetchFromCacheMiddleware ().process_request (request )
1218+ self .assertEqual (get_cache_data .content , en_message )
12401219 # change again the language
1241- translation .activate ('es' )
1242- get_cache_data = FetchFromCacheMiddleware ().process_request (request )
1243- self .assertEqual (get_cache_data .content , es_message )
1244-
1245- class PrefixedCacheI18nTest (CacheI18nTest ):
1246- def setUp (self ):
1247- super (PrefixedCacheI18nTest , self ).setUp ()
1248- self .old_cache_key_prefix = settings .CACHES ['default' ].get ('KEY_PREFIX' , None )
1249- settings .CACHES ['default' ]['KEY_PREFIX' ] = 'cacheprefix'
1220+ with translation .override ('es' ):
1221+ get_cache_data = FetchFromCacheMiddleware ().process_request (request )
1222+ self .assertEqual (get_cache_data .content , es_message )
12501223
1251- def tearDown (self ):
1252- super (PrefixedCacheI18nTest , self ).tearDown ()
1253- if self .old_cache_key_prefix is not None :
1254- del settings .CACHES ['default' ]['KEY_PREFIX' ]
1255- else :
1256- settings .CACHES ['default' ]['KEY_PREFIX' ] = self .old_cache_key_prefix
1224+ CacheI18nTest = override_settings (
1225+ CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix' ,
1226+ CACHES = {
1227+ 'default' : {
1228+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1229+ },
1230+ },
1231+ LANGUAGES = (
1232+ ('en' , 'English' ),
1233+ ('es' , 'Spanish' ),
1234+ ),
1235+ )(CacheI18nTest )
1236+
1237+ PrefixedCacheI18nTest = override_settings (
1238+ CACHES = {
1239+ 'default' : {
1240+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1241+ 'KEY_PREFIX' : 'cacheprefix'
1242+ },
1243+ },
1244+ )(CacheI18nTest )
12571245
12581246
12591247def hello_world_view (request , value ):
12601248 return HttpResponse ('Hello World %s' % value )
12611249
1250+
12621251class CacheMiddlewareTest (unittest .TestCase ):
12631252
12641253 def setUp (self ):
12651254 self .factory = RequestFactory ()
12661255
1267- self .orig_cache_middleware_alias = settings .CACHE_MIDDLEWARE_ALIAS
1268- self .orig_cache_middleware_key_prefix = settings .CACHE_MIDDLEWARE_KEY_PREFIX
1269- self .orig_cache_middleware_seconds = settings .CACHE_MIDDLEWARE_SECONDS
1270- self .orig_cache_middleware_anonymous_only = getattr (settings , 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY' , False )
1271- self .orig_caches = settings .CACHES
1272-
1273- settings .CACHE_MIDDLEWARE_ALIAS = 'other'
1274- settings .CACHE_MIDDLEWARE_KEY_PREFIX = 'middlewareprefix'
1275- settings .CACHE_MIDDLEWARE_SECONDS = 30
1276- settings .CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False
1277- settings .CACHES = {
1278- 'default' : {
1279- 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
1280- },
1281- 'other' : {
1282- 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1283- 'LOCATION' : 'other' ,
1284- 'TIMEOUT' : '1'
1285- }
1286- }
1287-
1288- def tearDown (self ):
1289- settings .CACHE_MIDDLEWARE_ALIAS = self .orig_cache_middleware_alias
1290- settings .CACHE_MIDDLEWARE_KEY_PREFIX = self .orig_cache_middleware_key_prefix
1291- settings .CACHE_MIDDLEWARE_SECONDS = self .orig_cache_middleware_seconds
1292- settings .CACHE_MIDDLEWARE_ANONYMOUS_ONLY = self .orig_cache_middleware_anonymous_only
1293- settings .CACHES = self .orig_caches
1294-
12951256 def test_constructor (self ):
12961257 """
12971258 Ensure the constructor is correctly distinguishing between usage of CacheMiddleware as
@@ -1354,11 +1315,11 @@ def test_middleware(self):
13541315 self .assertNotEquals (result , None )
13551316 self .assertEqual (result .content , 'Hello World 1' )
13561317
1318+ @override_settings (CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True )
13571319 def test_cache_middleware_anonymous_only_wont_cause_session_access (self ):
13581320 """ The cache middleware shouldn't cause a session access due to
13591321 CACHE_MIDDLEWARE_ANONYMOUS_ONLY if nothing else has accessed the
13601322 session. Refs 13283 """
1361- settings .CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
13621323
13631324 from django .contrib .sessions .middleware import SessionMiddleware
13641325 from django .contrib .auth .middleware import AuthenticationMiddleware
@@ -1383,11 +1344,11 @@ def test_cache_middleware_anonymous_only_wont_cause_session_access(self):
13831344
13841345 self .assertEqual (request .session .accessed , False )
13851346
1347+ @override_settings (CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True )
13861348 def test_cache_middleware_anonymous_only_with_cache_page (self ):
13871349 """CACHE_MIDDLEWARE_ANONYMOUS_ONLY should still be effective when used
13881350 with the cache_page decorator: the response to a request from an
13891351 authenticated user should not be cached."""
1390- settings .CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
13911352
13921353 request = self .factory .get ('/view_anon/' )
13931354
@@ -1498,6 +1459,23 @@ def test_view_decorator(self):
14981459 response = other_with_timeout_view (request , '18' )
14991460 self .assertEqual (response .content , 'Hello World 18' )
15001461
1462+ CacheMiddlewareTest = override_settings (
1463+ CACHE_MIDDLEWARE_ALIAS = 'other' ,
1464+ CACHE_MIDDLEWARE_KEY_PREFIX = 'middlewareprefix' ,
1465+ CACHE_MIDDLEWARE_SECONDS = 30 ,
1466+ CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False ,
1467+ CACHES = {
1468+ 'default' : {
1469+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1470+ },
1471+ 'other' : {
1472+ 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
1473+ 'LOCATION' : 'other' ,
1474+ 'TIMEOUT' : '1' ,
1475+ },
1476+ },
1477+ )(CacheMiddlewareTest )
1478+
15011479
15021480class TestWithTemplateResponse (TestCase ):
15031481 """
@@ -1604,6 +1582,7 @@ def test_admin(self):
16041582 self .assertEqual (response .status_code , 200 )
16051583 self .assertTrue (response .has_header ('ETag' ))
16061584
1585+
16071586if __name__ == '__main__' :
16081587 unittest .main ()
16091588
0 commit comments