From a84f65df791faa201be4a517d4a27a2cabec8ba3 Mon Sep 17 00:00:00 2001 From: lukeludwig Date: Mon, 19 Jan 2009 22:20:16 -0600 Subject: [PATCH] fixed test_caching_of_columns in has_and_belongs_to_many_associations_test.rb to work for all database adapters by using assert_columns instead of assert_queries. Added test_caching_of_columns to base_test.rb --- activerecord/lib/active_record/test_case.rb | 9 +++++++++ .../has_and_belongs_to_many_associations_test.rb | 4 ++-- activerecord/test/cases/base_test.rb | 9 +++++++++ activerecord/test/cases/helper.rb | 7 +++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/test_case.rb b/activerecord/lib/active_record/test_case.rb index 149b932..de804b4 100644 --- a/activerecord/lib/active_record/test_case.rb +++ b/activerecord/lib/active_record/test_case.rb @@ -34,6 +34,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 1e3b423..78ddf47 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 @@ -780,10 +780,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 0f03dae..af46b06 100755 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -2086,6 +2086,15 @@ class BasicsTest < ActiveRecord::TestCase 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 + private def with_kcode(kcode) if RUBY_VERSION < '1.9' diff --git a/activerecord/test/cases/helper.rb b/activerecord/test/cases/helper.rb index 24ce35e..2692a55 100644 --- a/activerecord/test/cases/helper.rb +++ b/activerecord/test/cases/helper.rb @@ -43,6 +43,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