1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/cases/migration/compatibility_test.rb
Prathamesh Sonpatki 33b0dbe407 Fix random failures of tests on Travis
- Tests on Travis are randomly failing because schema_migrations table
  does not exist in teardown block.
- Also checked that all other places where we have used
  `ActiveRecord::SchemaMigration.delete_all` we have rescued it, so used
  it here also. This failure was not specifically related to the test
  added in this PR but to overall compatibility migration tests, so
  adding as separate commit.
2016-02-12 19:46:03 +05:30

118 lines
3.7 KiB
Ruby

require 'cases/helper'
module ActiveRecord
class Migration
class CompatibilityTest < ActiveRecord::TestCase
attr_reader :connection
self.use_transactional_tests = false
def setup
super
@connection = ActiveRecord::Base.connection
@verbose_was = ActiveRecord::Migration.verbose
ActiveRecord::Migration.verbose = false
connection.create_table :testings do |t|
t.column :foo, :string, :limit => 100
t.column :bar, :string, :limit => 100
end
end
teardown do
connection.drop_table :testings rescue nil
ActiveRecord::Migration.verbose = @verbose_was
ActiveRecord::SchemaMigration.delete_all rescue nil
end
def test_migration_doesnt_remove_named_index
connection.add_index :testings, :foo, :name => "custom_index_name"
migration = Class.new(ActiveRecord::Migration[4.2]) {
def version; 101 end
def migrate(x)
remove_index :testings, :foo
end
}.new
assert connection.index_exists?(:testings, :foo, name: "custom_index_name")
assert_raise(StandardError) { ActiveRecord::Migrator.new(:up, [migration]).migrate }
assert connection.index_exists?(:testings, :foo, name: "custom_index_name")
end
def test_migration_does_remove_unnamed_index
connection.add_index :testings, :bar
migration = Class.new(ActiveRecord::Migration[4.2]) {
def version; 101 end
def migrate(x)
remove_index :testings, :bar
end
}.new
assert connection.index_exists?(:testings, :bar)
ActiveRecord::Migrator.new(:up, [migration]).migrate
assert_not connection.index_exists?(:testings, :bar)
end
def test_references_does_not_add_index_by_default
migration = Class.new(ActiveRecord::Migration) {
def migrate(x)
create_table :more_testings do |t|
t.references :foo
t.belongs_to :bar, index: false
end
end
}.new
ActiveRecord::Migrator.new(:up, [migration]).migrate
assert_not connection.index_exists?(:more_testings, :foo_id)
assert_not connection.index_exists?(:more_testings, :bar_id)
ensure
connection.drop_table :more_testings rescue nil
end
def test_timestamps_have_null_constraints_if_not_present_in_migration_of_create_table
migration = Class.new(ActiveRecord::Migration) {
def migrate(x)
create_table :more_testings do |t|
t.timestamps
end
end
}.new
ActiveRecord::Migrator.new(:up, [migration]).migrate
assert connection.columns(:more_testings).find { |c| c.name == 'created_at' }.null
assert connection.columns(:more_testings).find { |c| c.name == 'updated_at' }.null
ensure
connection.drop_table :more_testings rescue nil
end
def test_timestamps_have_null_constraints_if_not_present_in_migration_for_adding_timestamps_to_existing_table
migration = Class.new(ActiveRecord::Migration) {
def migrate(x)
add_timestamps :testings
end
}.new
ActiveRecord::Migrator.new(:up, [migration]).migrate
assert connection.columns(:testings).find { |c| c.name == 'created_at' }.null
assert connection.columns(:testings).find { |c| c.name == 'updated_at' }.null
end
def test_legacy_migrations_get_deprecation_warning_when_run
migration = Class.new(ActiveRecord::Migration) {
def up
add_column :testings, :baz, :string
end
}
assert_deprecated do
migration.migrate :up
end
end
end
end
end