@@ -191,6 +191,32 @@ def test_with_deferred_parent_expiration
191
191
assert_operator ( @memcached_spy . calls . count , :> , 0 )
192
192
assert_equal ( expected_item_expiration_count , item_expiration_count )
193
193
assert_equal ( expected_associated_record_expiration_count , associated_record_expiration_count )
194
+ ensure
195
+ Thread . current [ :deferred_parent_expiration ] = nil
196
+ end
197
+
198
+ def test_double_nested_deferred_parent_expiration
199
+ Item . send ( :cache_has_many , :associated_records , embed : true )
200
+
201
+ @parent = Item . create! ( title : "bob" )
202
+ @records = @parent . associated_records . create! ( [ { name : "foo" } , { name : "bar" } , { name : "baz" } ] )
203
+
204
+ @memcached_spy = Spy . on ( backend , :write ) . and_call_through
205
+
206
+ assert_raises ( IdentityCache ::NestedDeferredParentBlockError ) do
207
+ IdentityCache . with_deferred_parent_expiration do
208
+ IdentityCache . with_deferred_parent_expiration do
209
+ @parent . transaction do
210
+ @parent . associated_records . destroy_all
211
+ end
212
+ assert_equal ( expected_associated_record_expiration_count , @memcached_spy . calls . count )
213
+ end
214
+ end
215
+ end
216
+
217
+ assert_equal ( 0 , @memcached_spy . calls . count )
218
+ ensure
219
+ Thread . current [ :deferred_parent_expiration ] = nil
194
220
end
195
221
196
222
def test_deep_association_with_deferred_parent_expiration
@@ -228,6 +254,8 @@ def test_deep_association_with_deferred_parent_expiration
228
254
assert_equal ( expected_item_expiration_count , item_expiration_count )
229
255
assert_equal ( expected_associated_record_expiration_count , associated_record_expiration_count )
230
256
assert_equal ( expected_deeply_associated_record_expiration_count , deeply_associated_record_expiration_count )
257
+ ensure
258
+ Thread . current [ :deferred_parent_expiration ] = nil
231
259
end
232
260
233
261
private
0 commit comments