88
99from django_redis import get_redis_connection
1010
11+ from qscache import clear_cache_keys , clear_cache_detail
12+
1113from example_app .models import Example
1214from example_app .cache import (
1315 example_cache_manager ,
@@ -65,7 +67,7 @@ def test_get(self) -> None:
6567 unique_identifier = example_object .pk ,
6668 filter_kwargs = {"pk" : example_object .pk },
6769 )
68- detail_cache_key = example_cache_manager ._get_detail_cache_key (
70+ detail_cache_key = example_cache_manager .get_detail_cache_key (
6971 unique_identifier = example_object .pk
7072 )
7173
@@ -113,7 +115,7 @@ def test_get_with_filter(self) -> None:
113115 raise_exception = False , # if raise_exception is False then we don't raise Http404 instead we return None
114116 )
115117
116- cache_key = example_cache_manager ._get_detail_cache_key (
118+ cache_key = example_cache_manager .get_detail_cache_key (
117119 unique_identifier = example_object .pk
118120 )
119121
@@ -139,7 +141,7 @@ def test_get_raise_exception(self) -> None:
139141 filter_kwargs = filter_kwargs ,
140142 )
141143
142- cache_key = example_cache_manager ._get_detail_cache_key (
144+ cache_key = example_cache_manager .get_detail_cache_key (
143145 unique_identifier = example_object .pk
144146 )
145147
@@ -386,17 +388,55 @@ def test_dont_use_prefetch_related_for_list(self) -> None:
386388
387389 # 1 new query is executed because we don't prefetch_related objects in list query when use_prefetch_related_for_list is False
388390 self .assertEqual (len (connection .queries ), 1 )
389-
391+
390392 obj = example_cache_user_prefetch_related_manager .get (
391- unique_identifier = example_object .pk ,
393+ unique_identifier = example_object .pk ,
392394 filter_kwargs = {"pk" : example_object .pk },
393395 )
394-
396+
395397 reset_queries ()
396-
397-
398+
398399 for user in obj .users .all ():
399400 first_name = user .first_name
400-
401+
401402 self .assertEqual (len (connection .queries ), 0 )
402-
403+
404+ def test_clear_cache_keys_decorator (self ) -> None :
405+ example_list = example_cache_manager .all ()
406+
407+ self .assertIn (example_cache_manager .cache_key , cache .keys ("*" ))
408+
409+ @clear_cache_keys (keys = [example_cache_manager .cache_key ])
410+ def create_example_object () -> None :
411+ example_object = Example (
412+ title = "MojixCoder" , text = "Mojix Coder" , number = 1010
413+ )
414+ example_object .save ()
415+
416+ create_example_object ()
417+
418+ # Cache key is removed from cache
419+ # So next time when we call .all() cache will be updated
420+ self .assertNotIn (example_cache_manager .cache_key , cache .keys ("*" ))
421+
422+ def test_clear_cache_detail (self ) -> None :
423+ example_object = Example (title = "MojixCoder" , text = "Mojix Coder" , number = 1010 )
424+ example_object .save ()
425+
426+ example_obj = example_cache_manager .get (
427+ unique_identifier = example_object .pk , filter_kwargs = {"pk" : example_object .pk }
428+ )
429+
430+ cache_key = example_cache_manager .get_detail_cache_key (example_object .pk )
431+
432+ self .assertIn (cache_key , cache .keys ("*" ))
433+
434+ @clear_cache_detail (manager = example_cache_manager )
435+ def update_example_object () -> Example :
436+ example_object .title = "I am updated"
437+ example_object .save ()
438+ return example_object
439+
440+ update_example_object ()
441+
442+ self .assertNotIn (cache_key , cache .keys ("*" ))
0 commit comments