Sha256: a6b6f09b4fe95cef71eb2c5c916c4d9916a490a5218a316ee4d928b9b292495e

Contents?: true

Size: 1.79 KB

Versions: 7

Compression:

Stored size: 1.79 KB

Contents

# encoding: UTF-8
require 'cases/helper_sqlserver'
require 'models/ship'
require 'models/developer'

class TransactionTestSQLServer < ActiveRecord::TestCase

  self.use_transactional_fixtures = false

  before { delete_ships }

  it 'allow ActiveRecord::Rollback to work in 1 transaction block' do
    Ship.transaction do
      Ship.create! name: 'Black Pearl'
      raise ActiveRecord::Rollback
    end
    assert_no_ships
  end

  it 'allow nested transactions to totally rollback' do
    begin
      Ship.transaction do
        Ship.create! name: 'Black Pearl'
        Ship.transaction do
          Ship.create! name: 'Flying Dutchman'
          raise 'HELL'
        end
      end
    rescue Exception => e
      assert_no_ships
    end
  end

  it 'can use an isolation level and reverts back to starting isolation level' do
    in_level = nil
    begin_level = connection.user_options_isolation_level
    begin_level.must_match %r{read committed}i
    Ship.transaction(isolation: :serializable) do
      Ship.create! name: 'Black Pearl'
      in_level = connection.user_options_isolation_level
    end
    after_level = connection.user_options_isolation_level
    in_level.must_match %r{serializable}i
    after_level.must_match %r{read committed}i
  end

  it 'can use an isolation level and reverts back to starting isolation level under exceptions' do
    connection.user_options_isolation_level.must_match %r{read committed}i
    lambda {
      Ship.transaction(isolation: :serializable) { Ship.create! }
    }.must_raise(ActiveRecord::RecordInvalid)
    connection.user_options_isolation_level.must_match %r{read committed}i
  end


  protected

  def delete_ships
    Ship.delete_all
  end

  def assert_no_ships
    assert Ship.count.zero?, "Expected Ship to have no models but it did have:\n#{Ship.all.inspect}"
  end

end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
activerecord-sqlserver-adapter-4.2.18 test/cases/transaction_test_sqlserver.rb
activerecord-sqlserver-adapter-4.2.17 test/cases/transaction_test_sqlserver.rb
activerecord-sqlserver-adapter-4.2.16 test/cases/transaction_test_sqlserver.rb
activerecord-sqlserver-adapter_new-4.2.15 test/cases/transaction_test_sqlserver.rb
activerecord-sqlserver-adapter-4.2.15 test/cases/transaction_test_sqlserver.rb
activerecord-sqlserver-adapter-4.2.13 test/cases/transaction_test_sqlserver.rb
activerecord-sqlserver-adapter-4.2.12 test/cases/transaction_test_sqlserver.rb