diff options
Diffstat (limited to 'activerecord')
| -rw-r--r-- | activerecord/CHANGELOG.md | 18 | ||||
| -rw-r--r-- | activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb | 8 | ||||
| -rw-r--r-- | activerecord/lib/active_record/fixtures.rb | 4 | ||||
| -rw-r--r-- | activerecord/test/cases/associations/eager_test.rb | 3 | ||||
| -rw-r--r-- | activerecord/test/cases/connection_pool_test.rb | 2 | ||||
| -rw-r--r-- | activerecord/test/cases/disconnected_test.rb | 26 | ||||
| -rw-r--r-- | activerecord/test/cases/fixtures_test.rb | 16 | 
7 files changed, 64 insertions, 13 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index ab1eb49286..21b0a52180 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,13 @@ +*   Fixture setup does no longer depend on `ActiveRecord::Base.configurations`. +    This is relevant when `ENV["DATABASE_URL"]` is used in place of a `database.yml`. + +    *Yves Senn* + +*   Fix mysql2 adapter raises the correct exception when executing a query on a +    closed connection. + +    *Yves Senn* +  *   Ambiguous reflections are on :through relationships are no longer supported.      For example, you need to change this: @@ -5,12 +15,12 @@          has_many :posts          has_many :taggings, :through => :posts        end -       +        class Post < ActiveRecord::Base          has_one :tagging          has_many :taggings        end -       +        class Tagging < ActiveRecord::Base        end @@ -20,12 +30,12 @@          has_many :posts          has_many :taggings, :through => :posts, :source => :tagging        end -       +        class Post < ActiveRecord::Base          has_one :tagging          has_many :taggings        end -       +        class Tagging < ActiveRecord::Base        end diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb index 530a27d099..edeb338310 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb @@ -213,9 +213,11 @@ module ActiveRecord        # Executes the SQL statement in the context of this connection.        def execute(sql, name = nil) -        # make sure we carry over any changes to ActiveRecord::Base.default_timezone that have been -        # made since we established the connection -        @connection.query_options[:database_timezone] = ActiveRecord::Base.default_timezone +        if @connection +          # make sure we carry over any changes to ActiveRecord::Base.default_timezone that have been +          # made since we established the connection +          @connection.query_options[:database_timezone] = ActiveRecord::Base.default_timezone +        end          super        end diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb index 33e19313a0..70eda332b3 100644 --- a/activerecord/lib/active_record/fixtures.rb +++ b/activerecord/lib/active_record/fixtures.rb @@ -841,8 +841,6 @@ module ActiveRecord      end      def setup_fixtures -      return if ActiveRecord::Base.configurations.blank? -        if pre_loaded_fixtures && !use_transactional_fixtures          raise RuntimeError, 'pre_loaded_fixtures requires use_transactional_fixtures'        end @@ -875,8 +873,6 @@ module ActiveRecord      end      def teardown_fixtures -      return if ActiveRecord::Base.configurations.blank? -        # Rollback changes if a transaction is active.        if run_in_transaction?          @fixture_connections.each do |connection| diff --git a/activerecord/test/cases/associations/eager_test.rb b/activerecord/test/cases/associations/eager_test.rb index 4aa6567d85..1cfaf552af 100644 --- a/activerecord/test/cases/associations/eager_test.rb +++ b/activerecord/test/cases/associations/eager_test.rb @@ -250,7 +250,8 @@ class EagerAssociationTest < ActiveRecord::TestCase      assert_nil Post.all.merge!(:includes => :author).find(posts(:authorless).id).author    end -  def test_nested_loading_with_no_associations +  # Regression test for 21c75e5 +  def test_nested_loading_does_not_raise_exception_when_association_does_not_exist      assert_nothing_raised do        Post.all.merge!(:includes => {:author => :author_addresss}).find(posts(:authorless).id)      end diff --git a/activerecord/test/cases/connection_pool_test.rb b/activerecord/test/cases/connection_pool_test.rb index e6af29282c..d5365b695e 100644 --- a/activerecord/test/cases/connection_pool_test.rb +++ b/activerecord/test/cases/connection_pool_test.rb @@ -329,7 +329,7 @@ module ActiveRecord        end        # make sure exceptions are thrown when establish_connection -      # is called with a anonymous class +      # is called with an anonymous class        def test_anonymous_class_exception          anonymous = Class.new(ActiveRecord::Base)          handler = ActiveRecord::Base.connection_handler diff --git a/activerecord/test/cases/disconnected_test.rb b/activerecord/test/cases/disconnected_test.rb new file mode 100644 index 0000000000..cc2c1f6489 --- /dev/null +++ b/activerecord/test/cases/disconnected_test.rb @@ -0,0 +1,26 @@ +require "cases/helper" + +class TestRecord < ActiveRecord::Base +end + +class TestDisconnectedAdapter < ActiveRecord::TestCase +  self.use_transactional_fixtures = false + +  def setup +    @connection = ActiveRecord::Base.connection +  end + +  def teardown +    spec = ActiveRecord::Base.connection_config +    ActiveRecord::Base.establish_connection(spec) +    @connection = nil +  end + +  test "can't execute statements while disconnected" do +    @connection.execute "SELECT count(*) from products" +    @connection.disconnect! +    assert_raises(ActiveRecord::StatementInvalid) do +      @connection.execute "SELECT count(*) from products" +    end +  end +end diff --git a/activerecord/test/cases/fixtures_test.rb b/activerecord/test/cases/fixtures_test.rb index f6cfee0cb8..df6edc4057 100644 --- a/activerecord/test/cases/fixtures_test.rb +++ b/activerecord/test/cases/fixtures_test.rb @@ -245,6 +245,22 @@ class FixturesTest < ActiveRecord::TestCase    def test_serialized_fixtures      assert_equal ["Green", "Red", "Orange"], traffic_lights(:uk).state    end + +  def test_fixtures_are_set_up_with_database_env_variable +    ENV.stubs(:[]).with("DATABASE_URL").returns("sqlite3:///:memory:") +    ActiveRecord::Base.stubs(:configurations).returns({}) +    test_case = Class.new(ActiveRecord::TestCase) do +      fixtures :accounts + +      def test_fixtures +        assert accounts(:signals37) +      end +    end + +    result = test_case.new(:test_fixtures).run + +    assert result.passed?, "Expected #{result.name} to pass:\n#{result}" +  end  end  if Account.connection.respond_to?(:reset_pk_sequence!)  | 
