aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/migration_test.rb
diff options
context:
space:
mode:
authorbondarev <alexander.i.bondarev@gmail.com>2013-02-25 19:05:22 +0400
committerbondarev <alexander.i.bondarev@gmail.com>2013-04-18 18:18:59 +0400
commit2976558bc3a02019b605a1d70fda76ba5e9b5df2 (patch)
treef7fce26c5be8b73cd7907b5e0fd23e5772d9b3c2 /activerecord/test/cases/migration_test.rb
parent130d3a06ade83aec27cf1d2ff841dce9e0ad4dfd (diff)
downloadrails-2976558bc3a02019b605a1d70fda76ba5e9b5df2.tar.gz
rails-2976558bc3a02019b605a1d70fda76ba5e9b5df2.tar.bz2
rails-2976558bc3a02019b605a1d70fda76ba5e9b5df2.zip
Support transactions in Migrator.run
Diffstat (limited to 'activerecord/test/cases/migration_test.rb')
-rw-r--r--activerecord/test/cases/migration_test.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb
index f8afb7c591..b26ffa0e79 100644
--- a/activerecord/test/cases/migration_test.rb
+++ b/activerecord/test/cases/migration_test.rb
@@ -258,6 +258,32 @@ class MigrationTest < ActiveRecord::TestCase
"On error, the Migrator should revert schema changes but it did not."
end
+ def test_migrator_one_up_with_exception_and_rollback_using_run
+ unless ActiveRecord::Base.connection.supports_ddl_transactions?
+ skip "not supported on #{ActiveRecord::Base.connection.class}"
+ end
+
+ assert_not Person.column_methods_hash.include?(:last_name)
+
+ migration = Class.new(ActiveRecord::Migration) {
+ def version; 100 end
+ def migrate(x)
+ add_column "people", "last_name", :string
+ raise 'Something broke'
+ end
+ }.new
+
+ migrator = ActiveRecord::Migrator.new(:up, [migration], 100)
+
+ e = assert_raise(StandardError) { migrator.run }
+
+ assert_equal "An error has occurred, the migration canceled:\n\nSomething broke", e.message
+
+ Person.reset_column_information
+ assert_not Person.column_methods_hash.include?(:last_name),
+ "On error, the Migrator should revert schema changes but it did not."
+ end
+
def test_migration_without_transaction
unless ActiveRecord::Base.connection.supports_ddl_transactions?
skip "not supported on #{ActiveRecord::Base.connection.class}"