aboutsummaryrefslogblamecommitdiffstats
path: root/activerecord/test/cases/associations/eager_singularization_test.rb
blob: 5d1c1c4b9ba3e82b30ea6143b9aa06e6d95c602b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                      
 
                                                     











                                                         
 


                                  
 

                                     
       






                                             
       



                                       
       
 



                                             
 



                                    
 

                                       
       
 





































                                                              
       
 











                                          
       
 

                                   
       
 



                                                      
       
 




























                                                                       


       
require "cases/helper"

if ActiveRecord::Base.connection.supports_migrations?
  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
      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

    teardown do
      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
end