diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-04 18:51:02 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-04 18:51:02 +0000 |
commit | 4160b518a82bcaa84e0e3125b4947b2dc3837fa3 (patch) | |
tree | def4e797e1834c65864498509ea98edd7dad7745 /activerecord/test | |
parent | 452442dde8e8ea5949c387ea5c78387bff330f2a (diff) | |
download | rails-4160b518a82bcaa84e0e3125b4947b2dc3837fa3.tar.gz rails-4160b518a82bcaa84e0e3125b4947b2dc3837fa3.tar.bz2 rails-4160b518a82bcaa84e0e3125b4947b2dc3837fa3.zip |
Added new Migrations framework for describing schema transformations in a way that can be easily applied across multiple databases #1604 [Tobias Luetke]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1672 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/migration_mysql.rb | 104 | ||||
-rw-r--r-- | activerecord/test/migration_test.rb | 139 |
2 files changed, 139 insertions, 104 deletions
diff --git a/activerecord/test/migration_mysql.rb b/activerecord/test/migration_mysql.rb deleted file mode 100644 index 6761d76ca1..0000000000 --- a/activerecord/test/migration_mysql.rb +++ /dev/null @@ -1,104 +0,0 @@ -require 'abstract_unit' -require 'fixtures/person' -require File.dirname(__FILE__) + '/fixtures/migrations/1_people_have_last_names' -require File.dirname(__FILE__) + '/fixtures/migrations/2_we_need_reminders' - -class Reminder < ActiveRecord::Base; end - -class MigrationTest < Test::Unit::TestCase - def setup - end - - def teardown - ActiveRecord::Base.connection.initialize_schema_information - ActiveRecord::Base.connection.update "UPDATE schema_info SET version = 0" - - Reminder.connection.drop_table("reminders") rescue nil - Reminder.reset_column_information - - Person.connection.remove_column("people", "last_name") rescue nil - Person.reset_column_information - end - - def test_add_remove_single_field - assert !Person.column_methods_hash.include?(:last_name) - - PeopleHaveLastNames.up - - Person.reset_column_information - assert Person.column_methods_hash.include?(:last_name) - - PeopleHaveLastNames.down - - Person.reset_column_information - assert !Person.column_methods_hash.include?(:last_name) - end - - def test_add_table - assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } - - WeNeedReminders.up - - assert Reminder.create("content" => "hello world", "remind_at" => Time.now) - assert "hello world", Reminder.find(:first) - - WeNeedReminders.down - assert_raises(ActiveRecord::StatementInvalid) { Reminder.find(:first) } - end - - def test_migrator - assert !Person.column_methods_hash.include?(:last_name) - assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } - - ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/') - - assert_equal 2, ActiveRecord::Migrator.current_version - Person.reset_column_information - assert Person.column_methods_hash.include?(:last_name) - assert Reminder.create("content" => "hello world", "remind_at" => Time.now) - assert "hello world", Reminder.find(:first) - - - ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/') - - assert_equal 0, ActiveRecord::Migrator.current_version - Person.reset_column_information - assert !Person.column_methods_hash.include?(:last_name) - assert_raises(ActiveRecord::StatementInvalid) { Reminder.find(:first) } - end - - def test_migrator_one_up - assert !Person.column_methods_hash.include?(:last_name) - assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } - - ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 1) - - Person.reset_column_information - assert Person.column_methods_hash.include?(:last_name) - assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } - - - ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 2) - - assert Reminder.create("content" => "hello world", "remind_at" => Time.now) - assert "hello world", Reminder.find(:first) - end - - def test_migrator_one_down - ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/') - - ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/', 1) - - Person.reset_column_information - assert Person.column_methods_hash.include?(:last_name) - assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } - end - - def test_migrator_one_up_one_down - ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 1) - ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/', 0) - - assert !Person.column_methods_hash.include?(:last_name) - assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } - end -end diff --git a/activerecord/test/migration_test.rb b/activerecord/test/migration_test.rb new file mode 100644 index 0000000000..72d0fbf817 --- /dev/null +++ b/activerecord/test/migration_test.rb @@ -0,0 +1,139 @@ +require 'abstract_unit' +require 'fixtures/person' +require File.dirname(__FILE__) + '/fixtures/migrations/1_people_have_last_names' +require File.dirname(__FILE__) + '/fixtures/migrations/2_we_need_reminders' + +if ActiveRecord::Base.connection.supports_migrations? + class Reminder < ActiveRecord::Base; end + + class MigrationTest < Test::Unit::TestCase + def setup + end + + def teardown + ActiveRecord::Base.connection.initialize_schema_information + ActiveRecord::Base.connection.update "UPDATE schema_info SET version = 0" + + Reminder.connection.drop_table("reminders") rescue nil + Reminder.reset_column_information + + Person.connection.remove_column("people", "last_name") rescue nil + Person.connection.remove_column("people", "bio") rescue nil + Person.connection.remove_column("people", "age") rescue nil + Person.connection.remove_column("people", "height") rescue nil + Person.connection.remove_column("people", "birthday") rescue nil + Person.connection.remove_column("people", "favorite_day") rescue nil + Person.connection.remove_column("people", "male") rescue nil + Person.reset_column_information + end + + def test_native_types + + Person.delete_all + Person.connection.add_column "people", "last_name", :string + Person.connection.add_column "people", "bio", :text + Person.connection.add_column "people", "age", :integer + Person.connection.add_column "people", "height", :float + Person.connection.add_column "people", "birthday", :datetime + Person.connection.add_column "people", "favorite_day", :date + Person.connection.add_column "people", "male", :boolean + assert_nothing_raised { Person.create :first_name => 'bob', :last_name => 'bobsen', :bio => "I was born ....", :age => 18, :height => 1.78, :birthday => 18.years.ago, :favorite_day => 10.days.ago, :male => true } + bob = Person.find(:first) + + assert_equal bob.first_name, 'bob' + assert_equal bob.last_name, 'bobsen' + assert_equal bob.bio, "I was born ...." + assert_equal bob.age, 18 + assert_equal bob.male?, true + + assert_equal String, bob.first_name.class + assert_equal String, bob.last_name.class + assert_equal String, bob.bio.class + assert_equal Fixnum, bob.age.class + assert_equal Time, bob.birthday.class + assert_equal Date, bob.favorite_day.class + assert_equal TrueClass, bob.male?.class + end + + def test_add_remove_single_field + assert !Person.column_methods_hash.include?(:last_name) + + PeopleHaveLastNames.up + + Person.reset_column_information + assert Person.column_methods_hash.include?(:last_name) + + PeopleHaveLastNames.down + + Person.reset_column_information + assert !Person.column_methods_hash.include?(:last_name) + end + + def test_add_table + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + + WeNeedReminders.up + + assert Reminder.create("content" => "hello world", "remind_at" => Time.now) + assert_equal "hello world", Reminder.find(:first).content + + WeNeedReminders.down + assert_raises(ActiveRecord::StatementInvalid) { Reminder.find(:first) } + end + + def test_migrator + assert !Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + + ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/') + + assert_equal 2, ActiveRecord::Migrator.current_version + Person.reset_column_information + assert Person.column_methods_hash.include?(:last_name) + assert Reminder.create("content" => "hello world", "remind_at" => Time.now) + assert_equal "hello world", Reminder.find(:first).content + + ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/') + + assert_equal 0, ActiveRecord::Migrator.current_version + Person.reset_column_information + assert !Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.find(:first) } + end + + def test_migrator_one_up + assert !Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + + ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 1) + + Person.reset_column_information + assert Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + + + ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 2) + + assert Reminder.create("content" => "hello world", "remind_at" => Time.now) + assert_equal "hello world", Reminder.find(:first).content + end + + def test_migrator_one_down + ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/') + + ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/', 1) + + Person.reset_column_information + assert Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + end + + def test_migrator_one_up_one_down + ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 1) + ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/', 0) + + assert !Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + end + end +end
\ No newline at end of file |