From 5495b14a096d7f2ac0466f1945a6727e1d3e50c0 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sun, 10 Jul 2005 04:22:08 +0000 Subject: r2979@asus: jeremy | 2005-07-10 01:51:00 -0700 Split association reflection test into has_many and has_one tests. TODO: extend to belongs_to and habtm as well. Kill trailing whitespace. r2980@asus: jeremy | 2005-07-10 01:53:41 -0700 Test that eager load of firm.account (a has_one) returns the correct account. This doesn't cover the regression in Ticket #1688, however. Need a case where class name is not provided and the singular name is over-singularized by active_record.class_name. Kill trailing whitespace. r2981@asus: jeremy | 2005-07-10 01:56:44 -0700 Fix class name resolution in AssociationReflection#name_to_class_name. Use the equivalent of the idiomatic ||= (read or write if nil) for the class_inheritable_attribute reflection arrays. Kill trailing whitespace. r2982@asus: jeremy | 2005-07-10 01:59:08 -0700 Remove superfluous assignment in compute_type. In an inject, the return value is used for the next injection, so assigning to the injected value is unnecessary. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1790 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/test/associations_go_eager_test.rb | 20 +++++++-------- activerecord/test/reflection_test.rb | 33 ++++++++++++++++--------- 2 files changed, 30 insertions(+), 23 deletions(-) (limited to 'activerecord/test') diff --git a/activerecord/test/associations_go_eager_test.rb b/activerecord/test/associations_go_eager_test.rb index 110fb8e4ae..892a879283 100644 --- a/activerecord/test/associations_go_eager_test.rb +++ b/activerecord/test/associations_go_eager_test.rb @@ -29,7 +29,7 @@ class EagerAssociationTest < Test::Unit::TestCase assert_equal posts(:thinking), posts[4] assert_equal posts(:welcome), posts[5] end - + def test_loading_with_multiple_associations posts = Post.find(:all, :include => [ :comments, :author, :categories ], :order => "posts.id") assert_equal 2, posts.first.comments.size @@ -61,23 +61,23 @@ class EagerAssociationTest < Test::Unit::TestCase assert posts[0].categories.include?(categories(:technology)) assert posts[1].categories.include?(categories(:general)) end - + def test_eager_with_inheritance posts = SpecialPost.find(:all, :include => [ :comments ]) - end + end def test_eager_has_one_with_association_inheritance post = Post.find(4, :include => [ :very_special_comment ]) assert_equal "VerySpecialComment", post.very_special_comment.class.to_s - end - + end + def test_eager_has_many_with_association_inheritance post = Post.find(4, :include => [ :special_comments ]) post.special_comments.each do |special_comment| assert_equal "SpecialComment", special_comment.class.to_s end - end - + end + def test_eager_habtm_with_association_inheritance post = Post.find(6, :include => [ :special_categories ]) assert_equal 1, post.special_categories.size @@ -90,7 +90,8 @@ class EagerAssociationTest < Test::Unit::TestCase assert_not_nil companies(:first_firm).account f = Firm.find(:first, :include => :account, :conditions => ["companies.name = ?", "37signals"]) - assert_not_nil companies(:first_firm, :reload).account + assert_not_nil f.account + assert_equal companies(:first_firm, :reload).account, f.account end def test_eager_with_invalid_association_reference @@ -103,6 +104,3 @@ class EagerAssociationTest < Test::Unit::TestCase end end - - - diff --git a/activerecord/test/reflection_test.rb b/activerecord/test/reflection_test.rb index 1658408d7a..0935b7e5a2 100644 --- a/activerecord/test/reflection_test.rb +++ b/activerecord/test/reflection_test.rb @@ -17,7 +17,7 @@ class ReflectionTest < Test::Unit::TestCase @first.attribute_names ) end - + def test_columns assert_equal 12, Topic.columns.length end @@ -30,7 +30,7 @@ class ReflectionTest < Test::Unit::TestCase def test_content_columns assert_equal 8, Topic.content_columns.length end - + def test_column_string_type_and_limit assert_equal :string, @first.column_for_attribute("title").type assert_equal 255, @first.column_for_attribute("title").limit @@ -39,10 +39,10 @@ class ReflectionTest < Test::Unit::TestCase def test_human_name_for_column assert_equal "Author name", @first.column_for_attribute("author_name").human_name end - + def test_integer_columns assert_equal :integer, @first.column_for_attribute("id").type - end + end def test_aggregation_reflection reflection_for_address = ActiveRecord::Reflection::AggregateReflection.new( @@ -61,23 +61,32 @@ class ReflectionTest < Test::Unit::TestCase [ reflection_for_address, reflection_for_balance, reflection_for_gps_location ], Customer.reflect_on_all_aggregations ) - + assert_equal reflection_for_address, Customer.reflect_on_aggregation(:address) - + assert_equal Address, Customer.reflect_on_aggregation(:address).klass end - - def test_association_reflection - reflection_for_clients = ActiveRecord::Reflection::AssociationReflection.new( - :has_many, :clients, { :order => "id", :dependent => true }, Firm - ) + + def test_has_many_reflection + reflection_for_clients = ActiveRecord::Reflection::AssociationReflection.new(:has_many, :clients, { :order => "id", :dependent => true }, Firm) assert_equal reflection_for_clients, Firm.reflect_on_association(:clients) assert_equal Client, Firm.reflect_on_association(:clients).klass + assert_equal 'companies', Firm.reflect_on_association(:clients).table_name + assert_equal Client, Firm.reflect_on_association(:clients_of_firm).klass + assert_equal 'companies', Firm.reflect_on_association(:clients_of_firm).table_name + end + + def test_has_one_reflection + reflection_for_account = ActiveRecord::Reflection::AssociationReflection.new(:has_one, :account, { :foreign_key => "firm_id", :dependent => true }, Firm) + assert_equal reflection_for_account, Firm.reflect_on_association(:account) + + assert_equal Account, Firm.reflect_on_association(:account).klass + assert_equal 'accounts', Firm.reflect_on_association(:account).table_name end - + def test_association_reflection_in_modules assert_equal MyApplication::Business::Client, MyApplication::Business::Firm.reflect_on_association(:clients_of_firm).klass assert_equal MyApplication::Business::Firm, MyApplication::Billing::Account.reflect_on_association(:firm).klass -- cgit v1.2.3