From 774ea434a130073a065a72b8fb557e470e16b4a6 Mon Sep 17 00:00:00 2001 From: lukeludwig Date: Sun, 15 Mar 2009 21:20:54 -0500 Subject: [PATCH] test_caching_of_columns for base_test.rb and has_and_belongs_to_many_associations_test.rb. Verifies that columns is taken from the cache on the second call to it and verifies that reset_column_information clears the cache correctly. --- activerecord/lib/active_record/test_case.rb | 9 +++++++++ .../has_and_belongs_to_many_associations_test.rb | 4 ++-- activerecord/test/cases/base_test.rb | 10 ++++++++++ activerecord/test/cases/helper.rb | 7 +++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/test_case.rb b/activerecord/lib/active_record/test_case.rb index 8c6abaa..abcf27d 100644 --- a/activerecord/lib/active_record/test_case.rb +++ b/activerecord/lib/active_record/test_case.rb @@ -35,6 +35,15 @@ module ActiveRecord assert_queries(0, &block) end + # track how many times connection.columns is called. assert_queries does not track + # this consistently for columns across all database adapters + def assert_columns(num = 1) + $columns_executed = 0 + yield + ensure + assert_equal num, $columns_executed, "#{$columns_executed} instead of #{num} connection.columns were executed." + end + def self.use_concurrent_connections setup :connection_allow_concurrency_setup teardown :connection_allow_concurrency_teardown diff --git a/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb b/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb index 5e8b2ca..483a153 100644 --- a/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb @@ -813,10 +813,10 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase david = Developer.find(1) # clear cache possibly created by other tests david.projects.reset_column_information - assert_queries(0) { david.projects.columns; david.projects.columns } + assert_columns(1) { david.projects.columns; david.projects.columns } # and again to verify that reset_column_information clears the cache correctly david.projects.reset_column_information - assert_queries(0) { david.projects.columns; david.projects.columns } + assert_columns(1) { david.projects.columns; david.projects.columns } end end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 99d7796..d233134 100755 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -2104,4 +2104,14 @@ class BasicsTest < ActiveRecord::TestCase assert_equal custom_datetime, parrot[attribute] end end + + def test_caching_of_columns + # clear cache possibly created by other tests + Category.reset_column_information + assert_columns(1) { Category.columns; Category.columns } + # and again to verify that reset_column_information clears the cache correctly + Category.reset_column_information + assert_columns(1) { Category.columns; Category.columns } + end + end diff --git a/activerecord/test/cases/helper.rb b/activerecord/test/cases/helper.rb index 1ec52ac..82eedac 100644 --- a/activerecord/test/cases/helper.rb +++ b/activerecord/test/cases/helper.rb @@ -38,6 +38,13 @@ ActiveRecord::Base.connection.class.class_eval do end alias_method_chain :execute, :query_record + + def columns_with_count(table_name, name = nil) + $columns_executed ||= 0 + $columns_executed += 1 + columns_without_count(table_name, name) + end + alias_method_chain :columns, :count end # Make with_scope public for tests -- 1.6.0.2