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
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 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
private
def connection
ActiveRecord::Base.connection
end
end