aboutsummaryrefslogblamecommitdiffstats
path: root/activerecord/test/cases/associations/eager_singularization_test.rb
blob: 669569a7740f74c149e324fca555cb68f18ecb91 (plain) (tree)
1
2
3
4
                      
 
 
                                                       













































                                              

           
                                                                             
 
                                        


                                    
                                          

                                
                                          


                                
                                         

                             
                                                               


                                   
                                          

                             
                                          

                             
                                             

                             
                                            


                                    
                                           

                                   
                                              
                                  

       
 
              














                                        
     
 
                                                    
                            
                                                  



                                                 
                            
                                                  



                                                  
                            
                                               



                                                                 
                            

                                                  



                                                                     
                            
                                                     

       
 
                                                                   
                            
                                                      


       
require "cases/helper"


class EagerSingularizationTest < ActiveRecord::TestCase
  class Virus < ActiveRecord::Base
    belongs_to :octopus
  end

  class Octopus < ActiveRecord::Base
    has_one :virus
  end

  class Pass < ActiveRecord::Base
    belongs_to :bus
  end

  class Bus < ActiveRecord::Base
    has_many :passes
  end

  class Mess < ActiveRecord::Base
    has_and_belongs_to_many :crises
  end

  class Crisis < ActiveRecord::Base
    has_and_belongs_to_many :messes
    has_many :analyses, :dependent => :destroy
    has_many :successes, :through => :analyses
    has_many :dresses, :dependent => :destroy
    has_many :compresses, :through => :dresses
  end

  class Analysis < ActiveRecord::Base
    belongs_to :crisis
    belongs_to :success
  end

  class Success < ActiveRecord::Base
    has_many :analyses, :dependent => :destroy
    has_many :crises, :through => :analyses
  end

  class Dress < ActiveRecord::Base
    belongs_to :crisis
    has_many :compresses
  end

  class Compress < ActiveRecord::Base
    belongs_to :dress
  end

  def setup
    skip 'Does not support migrations' unless connection.supports_migrations?

    connection.create_table :viri do |t|
      t.column :octopus_id, :integer
      t.column :species, :string
    end
    connection.create_table :octopi do |t|
      t.column :species, :string
    end
    connection.create_table :passes do |t|
      t.column :bus_id, :integer
      t.column :rides, :integer
    end
    connection.create_table :buses do |t|
      t.column :name, :string
    end
    connection.create_table :crises_messes, :id => false do |t|
      t.column :crisis_id, :integer
      t.column :mess_id, :integer
    end
    connection.create_table :messes do |t|
      t.column :name, :string
    end
    connection.create_table :crises do |t|
      t.column :name, :string
    end
    connection.create_table :successes do |t|
      t.column :name, :string
    end
    connection.create_table :analyses do |t|
      t.column :crisis_id, :integer
      t.column :success_id, :integer
    end
    connection.create_table :dresses do |t|
      t.column :crisis_id, :integer
    end
    connection.create_table :compresses do |t|
      t.column :dress_id, :integer
    end
  end

  def teardown
    connection.drop_table :viri
    connection.drop_table :octopi
    connection.drop_table :passes
    connection.drop_table :buses
    connection.drop_table :crises_messes
    connection.drop_table :messes
    connection.drop_table :crises
    connection.drop_table :successes
    connection.drop_table :analyses
    connection.drop_table :dresses
    connection.drop_table :compresses
  end

  def connection
    ActiveRecord::Base.connection
  end

  def test_eager_no_extra_singularization_belongs_to
    assert_nothing_raised do
      Virus.all.merge!(:includes => :octopus).to_a
    end
  end

  def test_eager_no_extra_singularization_has_one
    assert_nothing_raised do
      Octopus.all.merge!(:includes => :virus).to_a
    end
  end

  def test_eager_no_extra_singularization_has_many
    assert_nothing_raised do
      Bus.all.merge!(:includes => :passes).to_a
    end
  end

  def test_eager_no_extra_singularization_has_and_belongs_to_many
    assert_nothing_raised do
      Crisis.all.merge!(:includes => :messes).to_a
      Mess.all.merge!(:includes => :crises).to_a
    end
  end

  def test_eager_no_extra_singularization_has_many_through_belongs_to
    assert_nothing_raised do
      Crisis.all.merge!(:includes => :successes).to_a
    end
  end

  def test_eager_no_extra_singularization_has_many_through_has_many
    assert_nothing_raised do
      Crisis.all.merge!(:includes => :compresses).to_a
    end
  end
end