1+ # frozen_string_literal: true
2+ require "test_helper"
3+
4+ module IdentityCache
5+ class CacheManualExpireTest < IdentityCache ::TestCase
6+ def setup
7+ super
8+ AssociatedRecord . cache_attribute ( :name )
9+
10+ @parent = Item . create! ( title : "bob" )
11+ @record = @parent . associated_records . create! ( name : "foo" )
12+ IdentityCache . cache . clear
13+ end
14+
15+ def test_cache_indexed_columns_returns_the_correct_columns_for_expiration
16+ AssociatedRecord . cache_attribute ( :name , by : :item_id )
17+ expected_result = [ :id , :item_id ]
18+ assert_equal ( expected_result , AssociatedRecord . cache_indexed_columns )
19+ end
20+
21+ def test_expire_cache_for_udate
22+ id = 1
23+ item_id = 1
24+ AssociatedRecord . cache_attribute ( :item_id , by : :name )
25+
26+ assert_queries ( 1 ) do
27+ assert_equal ( item_id , AssociatedRecord . fetch_item_id_by_name ( "foo" ) )
28+ end
29+
30+ AssociatedRecord . where ( id : 1 ) . update_all ( name : "bar" )
31+ old_values = {
32+ name : "foo" ,
33+ id : id ,
34+ }
35+ new_values = {
36+ name : "bar" ,
37+ id : id ,
38+ }
39+
40+ AssociatedRecord . expire_cache_for_update ( old_values , new_values )
41+ assert_queries ( 2 ) do
42+ assert_equal ( item_id , AssociatedRecord . fetch_item_id_by_name ( "bar" ) )
43+ assert_nil ( AssociatedRecord . fetch_item_id_by_name ( "foo" ) )
44+ end
45+ end
46+
47+ def test_expire_cache_for_udate_raises_when_a_hash_is_missing_an_index_key
48+ expected_error_message = "key not found: :id"
49+ old_values = {
50+ name : "foo" ,
51+ }
52+ new_values = {
53+ name : "bar" ,
54+ }
55+
56+ error = assert_raises do
57+ AssociatedRecord . expire_cache_for_update ( old_values , new_values )
58+ end
59+
60+ assert_equal ( expected_error_message , error . message )
61+ end
62+
63+ def test_expire_cache_for_insert
64+ id = 1
65+ AssociatedRecord . fetch_name_by_id ( id )
66+ expire_hash_keys = {
67+ id : id
68+ }
69+
70+ AssociatedRecord . expire_cache_for_insert ( expire_hash_keys )
71+ assert_queries ( 1 ) do
72+ assert_equal ( "foo" , AssociatedRecord . fetch_name_by_id ( id ) )
73+ end
74+ end
75+
76+ def test_expire_cache_for_delete
77+ id = 1
78+ AssociatedRecord . fetch_name_by_id ( 1 )
79+ expire_hash_keys = {
80+ id : id
81+ }
82+
83+ AssociatedRecord . expire_cache_for_delete ( expire_hash_keys )
84+ assert_queries ( 1 ) do
85+ assert_equal ( "foo" , AssociatedRecord . fetch_name_by_id ( id ) )
86+ end
87+ end
88+ end
89+ end
0 commit comments