aboutsummaryrefslogblamecommitdiffstats
path: root/activerecord/test/cases/inclusion_test.rb
blob: 8f095e49536dba498391a4190985624fef10e2d4 (plain) (tree)
1
2
3
4
5
6
7
8
9





                                                      
                                                   
     
 




                                  






                                               



                                                   




                                                





                                                           



                                                              

















                                                      
                                                                 


                             


                                                                         




                                                                                 








                                                         




                                                                                 

                            



                                                                                      
 
                        

                                                                     
                              

                        
                                                                                  

                                                   
                                                    
     

















                                                                  
   











                                                    
require 'cases/helper'
require 'models/teapot'

class BasicInclusionModelTest < ActiveRecord::TestCase
  def test_basic_model
    Teapot.create!(:name => "Ronnie Kemper")
    assert_equal "Ronnie Kemper", Teapot.first.name
  end

  def test_initialization
    t = Teapot.new(:name => "Bob")
    assert_equal "Bob", t.name
  end

  def test_inherited_model
    teapot = CoolTeapot.create!(:name => "Bob")
    teapot.reload

    assert_equal "Bob", teapot.name
    assert_equal "mmm", teapot.aaahhh
  end

  def test_generated_feature_methods
    assert Teapot < Teapot::GeneratedFeatureMethods
  end

  def test_exists
    t = Teapot.create!(:name => "Ronnie Kemper")
    assert Teapot.exists?(t)
  end

  def test_predicate_builder
    t = Teapot.create!(:name => "Bob")
    assert_equal "Bob", Teapot.where(:id => [t]).first.name
    assert_equal "Bob", Teapot.where(:id => t).first.name
  end

  def test_nested_model
    assert_equal "ceiling_teapots", Ceiling::Teapot.table_name
  end
end

class InclusionUnitTest < ActiveRecord::TestCase
  def setup
    @klass = Class.new { include ActiveRecord::Model }
  end

  def test_non_abstract_class
    assert !@klass.abstract_class?
  end

  def test_abstract_class
    @klass.abstract_class = true
    assert @klass.abstract_class?
  end

  def test_establish_connection
    assert @klass.respond_to?(:establish_connection)
    assert ActiveRecord::Model.respond_to?(:establish_connection)
  end

  def test_adapter_connection
    name = "#{ActiveRecord::Base.connection_config[:adapter]}_connection"
    assert @klass.respond_to?(name)
    assert ActiveRecord::Model.respond_to?(name)
  end

  def test_connection_handler
    assert_equal ActiveRecord::Base.connection_handler, @klass.connection_handler
  end

  def test_mirrored_configuration
    ActiveRecord::Base.time_zone_aware_attributes = true
    assert @klass.time_zone_aware_attributes
    ActiveRecord::Base.time_zone_aware_attributes = false
    assert !@klass.time_zone_aware_attributes
  ensure
    ActiveRecord::Base.time_zone_aware_attributes = false
  end

  # Doesn't really test anything, but this is here to ensure warnings don't occur
  def test_included_twice
    @klass.send :include, ActiveRecord::Model
  end

  def test_deprecation_proxy
    proxy = ActiveRecord::Model::DeprecationProxy.new

    assert_equal ActiveRecord::Model.name, proxy.name
    assert_equal ActiveRecord::Base.superclass, assert_deprecated { proxy.superclass }

    sup, sup2 = nil, nil
    ActiveSupport.on_load(:__test_active_record_model_deprecation) do
      sup = superclass
      sup2 = send(:superclass)
    end
    assert_deprecated do
      ActiveSupport.run_load_hooks(:__test_active_record_model_deprecation, proxy)
    end
    assert_equal ActiveRecord::Base.superclass, sup
    assert_equal ActiveRecord::Base.superclass, sup2
  end

  test "including in deprecation proxy" do
    model, base = ActiveRecord::Model.dup, ActiveRecord::Base.dup
    proxy = ActiveRecord::Model::DeprecationProxy.new(model, base)

    mod = Module.new
    proxy.include mod
    assert model < mod
  end

  test "extending in deprecation proxy" do
    model, base = ActiveRecord::Model.dup, ActiveRecord::Base.dup
    proxy = ActiveRecord::Model::DeprecationProxy.new(model, base)

    mod = Module.new
    assert_deprecated { proxy.extend mod }
    assert base.singleton_class < mod
  end
end

class InclusionFixturesTest < ActiveRecord::TestCase
  fixtures :teapots

  def test_fixtured_record
    assert_equal "Bob", teapots(:bob).name
  end

  def test_timestamped_fixture
    assert_not_nil teapots(:bob).created_at
  end
end