diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2004-12-14 12:32:29 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2004-12-14 12:32:29 +0000 |
commit | 605bc77533cf3b6700e91eda8994cdf6b82341cc (patch) | |
tree | 687a1c7e3bd319be5c0a6090dea190d6a8778658 /activerecord/test | |
parent | 317f13c2a8c047b3868a58e0121453b092557dba (diff) | |
download | rails-605bc77533cf3b6700e91eda8994cdf6b82341cc.tar.gz rails-605bc77533cf3b6700e91eda8994cdf6b82341cc.tar.bz2 rails-605bc77533cf3b6700e91eda8994cdf6b82341cc.zip |
Added a better exception for when a type column is used in a table without the intention of triggering single-table inheritance. Added that single-table inheritance will only kick in if the inheritance_column (by default "type") is present. Otherwise, inheritance wont have any magic side effects
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@149 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/fixtures/project.rb | 6 | ||||
-rwxr-xr-x | activerecord/test/fixtures/topic.rb | 2 | ||||
-rwxr-xr-x | activerecord/test/inheritance_test.rb | 34 |
3 files changed, 29 insertions, 13 deletions
diff --git a/activerecord/test/fixtures/project.rb b/activerecord/test/fixtures/project.rb index 1ccf39d7cf..fddea7b61c 100644 --- a/activerecord/test/fixtures/project.rb +++ b/activerecord/test/fixtures/project.rb @@ -1,4 +1,10 @@ class Project < ActiveRecord::Base has_and_belongs_to_many :developers, :uniq => true has_and_belongs_to_many :developers_named_david, :class_name => "Developer", :conditions => "name = 'David'", :uniq => true +end + +class SpecialProject < Project + def hello_world + "hello there!" + end end
\ No newline at end of file diff --git a/activerecord/test/fixtures/topic.rb b/activerecord/test/fixtures/topic.rb index 60022aa46b..4c46122450 100755 --- a/activerecord/test/fixtures/topic.rb +++ b/activerecord/test/fixtures/topic.rb @@ -3,7 +3,7 @@ class Topic < ActiveRecord::Base serialize :content before_create :default_written_on - before_destroy :destroy_children #'self.class.delete_all "parent_id = #{id}"' + before_destroy :destroy_children def parent self.class.find(parent_id) diff --git a/activerecord/test/inheritance_test.rb b/activerecord/test/inheritance_test.rb index 6f8175801d..e595ed1e92 100755 --- a/activerecord/test/inheritance_test.rb +++ b/activerecord/test/inheritance_test.rb @@ -1,20 +1,13 @@ require 'abstract_unit' require 'fixtures/company' - +require 'fixtures/project' class InheritanceTest < Test::Unit::TestCase - def setup - @company_fixtures = create_fixtures "companies" - end + fixtures :companies, :projects - def switch_to_alt_inheritance_column - # we don't want misleading test results, so get rid of the values in the type column - Company.find_all(nil, "id").each do |c| - c['type'] = nil - c.save - end - - def Company.inheritance_column() "ruby_type" end + def test_a_bad_type_column + Company.connection.insert "INSERT INTO companies (id, type, name) VALUES(100, 'bad_class!', 'Not happening')" + assert_raises(ActiveRecord::SubclassNotFound) { Company.find(100) } end def test_inheritance_find @@ -122,4 +115,21 @@ class InheritanceTest < Test::Unit::TestCase switch_to_alt_inheritance_column test_complex_inheritance end + + def test_inheritance_without_mapping + assert_kind_of SpecialProject, SpecialProject.find(1) + assert_nothing_raised { SpecialProject.create("name" => "And breaaaaathe!") } + + end + + private + def switch_to_alt_inheritance_column + # we don't want misleading test results, so get rid of the values in the type column + Company.find_all(nil, "id").each do |c| + c['type'] = nil + c.save + end + + def Company.inheritance_column() "ruby_type" end + end end
\ No newline at end of file |