class ActiveRecord::AdapterForeignKeyTest

Public Instance Methods

setup() click to toggle source
# File activerecord/test/cases/adapter_test.rb, line 303
def setup
  @connection = ActiveRecord::Base.connection
end
test_disable_referential_integrity() click to toggle source
# File activerecord/test/cases/adapter_test.rb, line 329
def test_disable_referential_integrity
  assert_nothing_raised do
    @connection.disable_referential_integrity do
      insert_into_fk_test_has_fk
      # should delete created record as otherwise disable_referential_integrity will try to enable constraints
      # after executed block and will fail (at least on Oracle)
      @connection.execute "DELETE FROM fk_test_has_fk"
    end
  end
end
test_foreign_key_violations_are_translated_to_specific_exception() click to toggle source
# File activerecord/test/cases/adapter_test.rb, line 321
def test_foreign_key_violations_are_translated_to_specific_exception
  error = assert_raises(ActiveRecord::InvalidForeignKey) do
    insert_into_fk_test_has_fk
  end

  assert_not_nil error.cause
end
test_foreign_key_violations_are_translated_to_specific_exception_with_validate_false() click to toggle source
# File activerecord/test/cases/adapter_test.rb, line 307
def test_foreign_key_violations_are_translated_to_specific_exception_with_validate_false
  klass_has_fk = Class.new(ActiveRecord::Base) do
    self.table_name = "fk_test_has_fk"
  end

  error = assert_raises(ActiveRecord::InvalidForeignKey) do
    has_fk = klass_has_fk.new
    has_fk.fk_id = 1231231231
    has_fk.save(validate: false)
  end

  assert_not_nil error.cause
end

Private Instance Methods

insert_into_fk_test_has_fk() click to toggle source
# File activerecord/test/cases/adapter_test.rb, line 342
def insert_into_fk_test_has_fk
  # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
  if @connection.prefetch_primary_key?
    id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
    @connection.execute "INSERT INTO fk_test_has_fk (id,fk_id) VALUES (#{id_value},0)"
  else
    @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
  end
end