diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2006-12-19 19:23:56 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2006-12-19 19:23:56 +0000 |
commit | 8732ce291b6048a4eb80748ea3f404f495b7104c (patch) | |
tree | 68aa08e51039022604711b29773ad2bfe334cc2e /activerecord/test | |
parent | 55d248ba721dc417e1e9179b3b14f11e33abfa7b (diff) | |
download | rails-8732ce291b6048a4eb80748ea3f404f495b7104c.tar.gz rails-8732ce291b6048a4eb80748ea3f404f495b7104c.tar.bz2 rails-8732ce291b6048a4eb80748ea3f404f495b7104c.zip |
Subclass instantiation doesn't try to explicitly require the corresponding subclass. Closes #6840.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5751 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test')
-rwxr-xr-x | activerecord/test/inheritance_test.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/activerecord/test/inheritance_test.rb b/activerecord/test/inheritance_test.rb index 20f9225004..8b0d70cfa3 100755 --- a/activerecord/test/inheritance_test.rb +++ b/activerecord/test/inheritance_test.rb @@ -167,3 +167,39 @@ class InheritanceTest < Test::Unit::TestCase Company.set_inheritance_column('type') end end + + +class InheritanceComputeTypeTest < Test::Unit::TestCase + fixtures :companies + + def setup + Dependencies.log_activity = true + end + + def teardown + Dependencies.log_activity = false + self.class.const_remove :FirmOnTheFly rescue nil + Firm.const_remove :FirmOnTheFly rescue nil + end + + def test_instantiation_doesnt_try_to_require_corresponding_file + foo = Firm.find(:first).clone + foo.ruby_type = foo.type = 'FirmOnTheFly' + foo.save! + + # Should fail without FirmOnTheFly in the type condition. + assert_raise(ActiveRecord::RecordNotFound) { Firm.find(foo.id) } + + # Nest FirmOnTheFly in the test case where Dependencies won't see it. + self.class.const_set :FirmOnTheFly, Class.new(Firm) + assert_raise(ActiveRecord::SubclassNotFound) { Firm.find(foo.id) } + + # Nest FirmOnTheFly in Firm where Dependencies will see it. + # This is analogous to nesting models in a migration. + Firm.const_set :FirmOnTheFly, Class.new(Firm) + + # And instantiate will find the existing constant rather than trying + # to require firm_on_the_fly. + assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find(foo.id) } + end +end |