mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Move some AR test cases to inheritance_test.rb
These methods are defined in inheritance.rb * `abstract_class?` * `descends_from_active_record?` * `compute_type`
This commit is contained in:
parent
67417f1821
commit
2fe8baf9b2
2 changed files with 80 additions and 80 deletions
|
@ -1204,42 +1204,10 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
assert_equal last, Developer.all.merge!(:order => :salary).to_a.last
|
||||
end
|
||||
|
||||
def test_abstract_class
|
||||
assert !ActiveRecord::Base.abstract_class?
|
||||
assert LoosePerson.abstract_class?
|
||||
assert !LooseDescendant.abstract_class?
|
||||
end
|
||||
|
||||
def test_abstract_class_table_name
|
||||
assert_nil AbstractCompany.table_name
|
||||
end
|
||||
|
||||
def test_descends_from_active_record
|
||||
assert !ActiveRecord::Base.descends_from_active_record?
|
||||
|
||||
# Abstract subclass of AR::Base.
|
||||
assert LoosePerson.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of an abstract class.
|
||||
assert LooseDescendant.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of AR::Base.
|
||||
assert TightPerson.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of a concrete class but has no type column.
|
||||
assert TightDescendant.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of AR::Base.
|
||||
assert Post.descends_from_active_record?
|
||||
|
||||
# Abstract subclass of a concrete class which has a type column.
|
||||
# This is pathological, as you'll never have Sub < Abstract < Concrete.
|
||||
assert !StiPost.descends_from_active_record?
|
||||
|
||||
# Concrete subclasses an abstract class which has a type column.
|
||||
assert !SubStiPost.descends_from_active_record?
|
||||
end
|
||||
|
||||
def test_find_on_abstract_base_class_doesnt_use_type_condition
|
||||
old_class = LooseDescendant
|
||||
Object.send :remove_const, :LooseDescendant
|
||||
|
@ -1284,53 +1252,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
ActiveRecord::Base.logger = original_logger
|
||||
end
|
||||
|
||||
def test_compute_type_success
|
||||
assert_equal Author, ActiveRecord::Base.send(:compute_type, 'Author')
|
||||
end
|
||||
|
||||
def test_compute_type_nonexistent_constant
|
||||
e = assert_raises NameError do
|
||||
ActiveRecord::Base.send :compute_type, 'NonexistentModel'
|
||||
end
|
||||
assert_equal 'uninitialized constant ActiveRecord::Base::NonexistentModel', e.message
|
||||
assert_equal 'ActiveRecord::Base::NonexistentModel', e.name
|
||||
end
|
||||
|
||||
def test_compute_type_no_method_error
|
||||
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise NoMethodError }) do
|
||||
assert_raises NoMethodError do
|
||||
ActiveRecord::Base.send :compute_type, 'InvalidModel'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_compute_type_on_undefined_method
|
||||
error = nil
|
||||
begin
|
||||
Class.new(Author) do
|
||||
alias_method :foo, :bar
|
||||
end
|
||||
rescue => e
|
||||
error = e
|
||||
end
|
||||
|
||||
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise e }) do
|
||||
|
||||
exception = assert_raises NameError do
|
||||
ActiveRecord::Base.send :compute_type, 'InvalidModel'
|
||||
end
|
||||
assert_equal error.message, exception.message
|
||||
end
|
||||
end
|
||||
|
||||
def test_compute_type_argument_error
|
||||
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise ArgumentError }) do
|
||||
assert_raises ArgumentError do
|
||||
ActiveRecord::Base.send :compute_type, 'InvalidModel'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_clear_cache!
|
||||
# preheat cache
|
||||
c1 = Post.connection.schema_cache.columns('posts')
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
require 'cases/helper'
|
||||
require 'models/author'
|
||||
require 'models/company'
|
||||
require 'models/person'
|
||||
require 'models/post'
|
||||
|
@ -55,6 +56,53 @@ class InheritanceTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_compute_type_success
|
||||
assert_equal Author, ActiveRecord::Base.send(:compute_type, 'Author')
|
||||
end
|
||||
|
||||
def test_compute_type_nonexistent_constant
|
||||
e = assert_raises NameError do
|
||||
ActiveRecord::Base.send :compute_type, 'NonexistentModel'
|
||||
end
|
||||
assert_equal 'uninitialized constant ActiveRecord::Base::NonexistentModel', e.message
|
||||
assert_equal 'ActiveRecord::Base::NonexistentModel', e.name
|
||||
end
|
||||
|
||||
def test_compute_type_no_method_error
|
||||
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise NoMethodError }) do
|
||||
assert_raises NoMethodError do
|
||||
ActiveRecord::Base.send :compute_type, 'InvalidModel'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_compute_type_on_undefined_method
|
||||
error = nil
|
||||
begin
|
||||
Class.new(Author) do
|
||||
alias_method :foo, :bar
|
||||
end
|
||||
rescue => e
|
||||
error = e
|
||||
end
|
||||
|
||||
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise e }) do
|
||||
|
||||
exception = assert_raises NameError do
|
||||
ActiveRecord::Base.send :compute_type, 'InvalidModel'
|
||||
end
|
||||
assert_equal error.message, exception.message
|
||||
end
|
||||
end
|
||||
|
||||
def test_compute_type_argument_error
|
||||
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise ArgumentError }) do
|
||||
assert_raises ArgumentError do
|
||||
ActiveRecord::Base.send :compute_type, 'InvalidModel'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_store_demodulized_class_name_with_store_full_sti_class_option_disabled
|
||||
without_store_full_sti_class do
|
||||
item = Namespaced::Company.new
|
||||
|
@ -77,6 +125,32 @@ class InheritanceTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_descends_from_active_record
|
||||
assert !ActiveRecord::Base.descends_from_active_record?
|
||||
|
||||
# Abstract subclass of AR::Base.
|
||||
assert LoosePerson.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of an abstract class.
|
||||
assert LooseDescendant.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of AR::Base.
|
||||
assert TightPerson.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of a concrete class but has no type column.
|
||||
assert TightDescendant.descends_from_active_record?
|
||||
|
||||
# Concrete subclass of AR::Base.
|
||||
assert Post.descends_from_active_record?
|
||||
|
||||
# Abstract subclass of a concrete class which has a type column.
|
||||
# This is pathological, as you'll never have Sub < Abstract < Concrete.
|
||||
assert !StiPost.descends_from_active_record?
|
||||
|
||||
# Concrete subclasses an abstract class which has a type column.
|
||||
assert !SubStiPost.descends_from_active_record?
|
||||
end
|
||||
|
||||
def test_company_descends_from_active_record
|
||||
assert !ActiveRecord::Base.descends_from_active_record?
|
||||
assert AbstractCompany.descends_from_active_record?, 'AbstractCompany should descend from ActiveRecord::Base'
|
||||
|
@ -84,6 +158,12 @@ class InheritanceTest < ActiveRecord::TestCase
|
|||
assert !Class.new(Company).descends_from_active_record?, 'Company subclass should not descend from ActiveRecord::Base'
|
||||
end
|
||||
|
||||
def test_abstract_class
|
||||
assert !ActiveRecord::Base.abstract_class?
|
||||
assert LoosePerson.abstract_class?
|
||||
assert !LooseDescendant.abstract_class?
|
||||
end
|
||||
|
||||
def test_inheritance_base_class
|
||||
assert_equal Post, Post.base_class
|
||||
assert_equal Post, SpecialPost.base_class
|
||||
|
@ -223,7 +303,6 @@ class InheritanceTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
def test_new_with_complex_inheritance
|
||||
assert_nothing_raised { Client.new(type: 'VerySpecialClient') }
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue