From 0b08ff7d92124cc370e9f0795d1559204f04f9a4 Mon Sep 17 00:00:00 2001 From: Jon Leighton Date: Fri, 16 Dec 2011 11:46:34 +0000 Subject: Cache columns at the model level. Allows two models to use the same table but have different primary keys. --- activerecord/test/cases/primary_keys_test.rb | 38 ++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'activerecord/test/cases/primary_keys_test.rb') diff --git a/activerecord/test/cases/primary_keys_test.rb b/activerecord/test/cases/primary_keys_test.rb index a02dcb9e1c..0669707baf 100644 --- a/activerecord/test/cases/primary_keys_test.rb +++ b/activerecord/test/cases/primary_keys_test.rb @@ -149,14 +149,36 @@ class PrimaryKeysTest < ActiveRecord::TestCase assert_equal k.connection.quote_column_name("foo"), k.quoted_primary_key end - def test_set_primary_key_sets_schema_cache - klass = Class.new(ActiveRecord::Base) - klass.table_name = 'fuuuuuu' - klass.connection.create_table(:fuuuuuu, :id => false) { |t| t.integer :omg } - klass.primary_key = 'omg' - assert klass.connection.schema_cache.columns_hash['fuuuuuu']['omg'].primary - ensure - klass.connection.drop_table(:fuuuuuu) if klass.table_exists? + def test_two_models_with_same_table_but_different_primary_key + k1 = Class.new(ActiveRecord::Base) + k1.table_name = 'posts' + k1.primary_key = 'id' + + k2 = Class.new(ActiveRecord::Base) + k2.table_name = 'posts' + k2.primary_key = 'title' + + assert k1.columns.find { |c| c.name == 'id' }.primary + assert !k1.columns.find { |c| c.name == 'title' }.primary + assert k1.columns_hash['id'].primary + assert !k1.columns_hash['title'].primary + + assert !k2.columns.find { |c| c.name == 'id' }.primary + assert k2.columns.find { |c| c.name == 'title' }.primary + assert !k2.columns_hash['id'].primary + assert k2.columns_hash['title'].primary + end + + def test_models_with_same_table_have_different_columns + k1 = Class.new(ActiveRecord::Base) + k1.table_name = 'posts' + + k2 = Class.new(ActiveRecord::Base) + k2.table_name = 'posts' + + k1.columns.zip(k2.columns).each do |col1, col2| + assert !col1.equal?(col2) + end end end -- cgit v1.2.3