mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
9e4c41c903
In the end I think the pain of implementing this seamlessly was not worth the gain provided. The intention was that it would allow plain ruby objects that might not live in your main application to be subclassed and have persistence mixed in. But I've decided that the benefit of doing that is not worth the amount of complexity that the implementation introduced.
108 lines
2.9 KiB
Ruby
108 lines
2.9 KiB
Ruby
require "cases/helper"
|
|
require 'models/entrant'
|
|
require 'models/bird'
|
|
require 'models/course'
|
|
|
|
class MultipleDbTest < ActiveRecord::TestCase
|
|
self.use_transactional_fixtures = false
|
|
|
|
def setup
|
|
@courses = create_fixtures("courses") { Course.retrieve_connection }
|
|
@colleges = create_fixtures("colleges") { College.retrieve_connection }
|
|
@entrants = create_fixtures("entrants")
|
|
end
|
|
|
|
def test_connected
|
|
assert_not_nil Entrant.connection
|
|
assert_not_nil Course.connection
|
|
end
|
|
|
|
def test_proper_connection
|
|
assert_not_equal(Entrant.connection, Course.connection)
|
|
assert_equal(Entrant.connection, Entrant.retrieve_connection)
|
|
assert_equal(Course.connection, Course.retrieve_connection)
|
|
assert_equal(ActiveRecord::Base.connection, Entrant.connection)
|
|
end
|
|
|
|
def test_find
|
|
c1 = Course.find(1)
|
|
assert_equal "Ruby Development", c1.name
|
|
c2 = Course.find(2)
|
|
assert_equal "Java Development", c2.name
|
|
e1 = Entrant.find(1)
|
|
assert_equal "Ruby Developer", e1.name
|
|
e2 = Entrant.find(2)
|
|
assert_equal "Ruby Guru", e2.name
|
|
e3 = Entrant.find(3)
|
|
assert_equal "Java Lover", e3.name
|
|
end
|
|
|
|
def test_associations
|
|
c1 = Course.find(1)
|
|
assert_equal 2, c1.entrants.count
|
|
e1 = Entrant.find(1)
|
|
assert_equal e1.course.id, c1.id
|
|
c2 = Course.find(2)
|
|
assert_equal 1, c2.entrants.count
|
|
e3 = Entrant.find(3)
|
|
assert_equal e3.course.id, c2.id
|
|
end
|
|
|
|
def test_course_connection_should_survive_dependency_reload
|
|
assert Course.connection
|
|
|
|
ActiveSupport::Dependencies.clear
|
|
Object.send(:remove_const, :Course)
|
|
require_dependency 'models/course'
|
|
|
|
assert Course.connection
|
|
end
|
|
|
|
def test_transactions_across_databases
|
|
c1 = Course.find(1)
|
|
e1 = Entrant.find(1)
|
|
|
|
begin
|
|
Course.transaction do
|
|
Entrant.transaction do
|
|
c1.name = "Typo"
|
|
e1.name = "Typo"
|
|
c1.save
|
|
e1.save
|
|
raise "No I messed up."
|
|
end
|
|
end
|
|
rescue
|
|
# Yup caught it
|
|
end
|
|
|
|
assert_equal "Typo", c1.name
|
|
assert_equal "Typo", e1.name
|
|
|
|
assert_equal "Ruby Development", Course.find(1).name
|
|
assert_equal "Ruby Developer", Entrant.find(1).name
|
|
end
|
|
|
|
def test_arel_table_engines
|
|
assert_not_equal Entrant.arel_engine, Bird.arel_engine
|
|
assert_not_equal Entrant.arel_engine, Course.arel_engine
|
|
end
|
|
|
|
def test_connection
|
|
assert_equal Entrant.arel_engine.connection, Bird.arel_engine.connection
|
|
assert_not_equal Entrant.arel_engine.connection, Course.arel_engine.connection
|
|
end
|
|
|
|
unless in_memory_db?
|
|
def test_associations_should_work_when_model_has_no_connection
|
|
begin
|
|
ActiveRecord::Base.remove_connection
|
|
assert_nothing_raised ActiveRecord::ConnectionNotEstablished do
|
|
College.first.courses.first
|
|
end
|
|
ensure
|
|
ActiveRecord::Base.establish_connection 'arunit'
|
|
end
|
|
end
|
|
end
|
|
end
|