Skip to content

Commit 6e2c2db

Browse files
committed
Refactor QueryCacheTest
In preparation of an upcoming query cache refactor. The main changes is to not test the clear caused by `cached { }` and what's inside the block.
1 parent 4332988 commit 6e2c2db

File tree

2 files changed

+58
-36
lines changed

2 files changed

+58
-36
lines changed

activerecord/test/cases/persistence_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ def test_reload_via_querycache
14731473
assert_equal parrot.id, found_parrot.id
14741474

14751475
# Manually update the 'name' attribute in the DB directly
1476-
assert_equal 1, ActiveRecord::Base.connection.query_cache.length
1476+
assert_equal 1, ActiveRecord::Base.connection.query_cache.size
14771477
ActiveRecord::Base.uncached do
14781478
found_parrot.name = "Mary"
14791479
found_parrot.save

activerecord/test/cases/query_cache_test.rb

Lines changed: 57 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ def test_execute_clear_cache
4646
mw = middleware { |env|
4747
Post.first
4848
query_cache = ActiveRecord::Base.connection.query_cache
49-
assert_equal 1, query_cache.length, query_cache.keys
49+
assert_equal 1, query_cache.size, query_cache.inspect
5050
Post.connection.execute("SELECT 1")
5151
query_cache = ActiveRecord::Base.connection.query_cache
52-
assert_equal 0, query_cache.length, query_cache.keys
52+
assert_equal 0, query_cache.size, query_cache.inspect
5353
}
5454
mw.call({})
5555

@@ -62,10 +62,10 @@ def test_exec_query_clear_cache
6262
mw = middleware { |env|
6363
Post.first
6464
query_cache = ActiveRecord::Base.connection.query_cache
65-
assert_equal 1, query_cache.length, query_cache.keys
65+
assert_equal 1, query_cache.size, query_cache.inspect
6666
Post.connection.exec_query("SELECT 1")
6767
query_cache = ActiveRecord::Base.connection.query_cache
68-
assert_equal 0, query_cache.length, query_cache.keys
68+
assert_equal 0, query_cache.size, query_cache.inspect
6969
}
7070
mw.call({})
7171

@@ -78,13 +78,13 @@ def test_writes_should_always_clear_cache
7878
mw = middleware { |env|
7979
Post.first
8080
query_cache = ActiveRecord::Base.connection.query_cache
81-
assert_equal 1, query_cache.length, query_cache.keys
81+
assert_equal 1, query_cache.size, query_cache.inspect
8282
Post.connection.uncached do
8383
# should clear the cache
8484
Post.create!(title: "a new post", body: "and a body")
8585
end
8686
query_cache = ActiveRecord::Base.connection.query_cache
87-
assert_equal 0, query_cache.length, query_cache.keys
87+
assert_equal 0, query_cache.size, query_cache.inspect
8888
}
8989
mw.call({})
9090

@@ -98,7 +98,7 @@ def test_exceptional_middleware_clears_and_disables_cache_on_error
9898
Task.find 1
9999
Task.find 1
100100
query_cache = ActiveRecord::Base.connection.query_cache
101-
assert_equal 1, query_cache.length, query_cache.keys
101+
assert_equal 1, query_cache.size, query_cache.inspect
102102
raise "lol borked"
103103
}
104104
assert_raises(RuntimeError) { mw.call({}) }
@@ -270,7 +270,7 @@ def test_middleware_caches
270270
Task.find 1
271271
Task.find 1
272272
query_cache = ActiveRecord::Base.connection.query_cache
273-
assert_equal 1, query_cache.length, query_cache.keys
273+
assert_equal 1, query_cache.size, query_cache.inspect
274274
[200, {}, nil]
275275
}
276276
mw.call({})
@@ -637,6 +637,8 @@ def test_clear_query_cache_is_called_on_all_connections
637637
ActiveRecord::Base.connection_pool.lock_thread = true
638638

639639
assert_cache :off
640+
ActiveRecord::Base.connection.enable_query_cache!
641+
assert_cache :clean
640642

641643
thread_a = Thread.new do
642644
middleware { |env|
@@ -668,7 +670,11 @@ def assert_cache(state, connection = ActiveRecord::Base.connection)
668670
case state
669671
when :off
670672
assert_not connection.query_cache_enabled, "cache should be off"
671-
assert_predicate connection.query_cache, :empty?, "cache should be empty"
673+
if connection.query_cache.nil?
674+
assert_nil connection.query_cache
675+
else
676+
assert_predicate connection.query_cache, :empty?, "cache should be nil or empty"
677+
end
672678
when :clean
673679
assert connection.query_cache_enabled, "cache should be on"
674680
assert_predicate connection.query_cache, :empty?, "cache should be empty"
@@ -800,7 +806,7 @@ def test_cache_gets_cleared_after_migration
800806
end
801807

802808
def test_find
803-
assert_called(Task.connection, :clear_query_cache) do
809+
assert_called(Task.connection.query_cache, :clear) do
804810
assert_not Task.connection.query_cache_enabled
805811
Task.cache do
806812
assert Task.connection.query_cache_enabled
@@ -817,9 +823,19 @@ def test_find
817823
end
818824
end
819825

826+
def test_enable_disable
827+
assert_called(Task.connection.query_cache, :clear, times: 1) do
828+
Task.cache { }
829+
end
830+
831+
assert_called(Task.connection.query_cache, :clear, times: 1) do
832+
Task.cache { Task.cache { } }
833+
end
834+
end
835+
820836
def test_update
821-
assert_called(Task.connection, :clear_query_cache, times: 2) do
822-
Task.cache do
837+
Task.cache do
838+
assert_called(Task.connection.query_cache, :clear, times: 1) do
823839
task = Task.find(1)
824840
task.starting = Time.now.utc
825841
task.save!
@@ -828,16 +844,16 @@ def test_update
828844
end
829845

830846
def test_destroy
831-
assert_called(Task.connection, :clear_query_cache, times: 2) do
832-
Task.cache do
847+
Task.cache do
848+
assert_called(Task.connection.query_cache, :clear, times: 1) do
833849
Task.find(1).destroy
834850
end
835851
end
836852
end
837853

838854
def test_insert
839-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
840-
Task.cache do
855+
Task.cache do
856+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
841857
Task.create!
842858
end
843859
end
@@ -846,40 +862,46 @@ def test_insert
846862
def test_insert_all
847863
skip unless supports_insert_on_duplicate_skip?
848864

849-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
850-
Task.cache { Task.insert({ starting: Time.now }) }
851-
end
865+
Task.cache do
866+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
867+
Task.insert({ starting: Time.now })
868+
end
852869

853-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
854-
Task.cache { Task.insert_all([{ starting: Time.now }]) }
870+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
871+
Task.insert_all([{ starting: Time.now }])
872+
end
855873
end
856874
end
857875

858876
def test_insert_all_bang
859-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
860-
Task.cache { Task.insert!({ starting: Time.now }) }
861-
end
877+
Task.cache do
878+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
879+
Task.insert!({ starting: Time.now })
880+
end
862881

863-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
864-
Task.cache { Task.insert_all!([{ starting: Time.now }]) }
882+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
883+
Task.insert_all!([{ starting: Time.now }])
884+
end
865885
end
866886
end
867887

868888
def test_upsert_all
869889
skip unless supports_insert_on_duplicate_update?
870890

871-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
872-
Task.cache { Task.upsert({ starting: Time.now }) }
873-
end
891+
Task.cache do
892+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
893+
Task.upsert({ starting: Time.now })
894+
end
874895

875-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
876-
Task.cache { Task.upsert_all([{ starting: Time.now }]) }
896+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
897+
Task.upsert_all([{ starting: Time.now }])
898+
end
877899
end
878900
end
879901

880902
def test_cache_is_expired_by_habtm_update
881-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
882-
ActiveRecord::Base.cache do
903+
ActiveRecord::Base.cache do
904+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
883905
c = Category.first
884906
p = Post.first
885907
p.categories << c
@@ -888,8 +910,8 @@ def test_cache_is_expired_by_habtm_update
888910
end
889911

890912
def test_cache_is_expired_by_habtm_delete
891-
assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do
892-
ActiveRecord::Base.cache do
913+
ActiveRecord::Base.cache do
914+
assert_called(ActiveRecord::Base.connection.query_cache, :clear, times: 1) do
893915
p = Post.find(1)
894916
assert_predicate p.categories, :any?
895917
p.categories.delete_all

0 commit comments

Comments
 (0)