Chris@909: require File.join(File.dirname(__FILE__), 'abstract_unit') Chris@909: Chris@909: if ActiveRecord::Base.connection.supports_migrations? Chris@909: class Thing < ActiveRecord::Base Chris@909: attr_accessor :version Chris@909: acts_as_versioned Chris@909: end Chris@909: Chris@909: class MigrationTest < Test::Unit::TestCase Chris@909: self.use_transactional_fixtures = false Chris@909: def teardown Chris@909: if ActiveRecord::Base.connection.respond_to?(:initialize_schema_information) Chris@909: ActiveRecord::Base.connection.initialize_schema_information Chris@909: ActiveRecord::Base.connection.update "UPDATE schema_info SET version = 0" Chris@909: else Chris@909: ActiveRecord::Base.connection.initialize_schema_migrations_table Chris@909: ActiveRecord::Base.connection.assume_migrated_upto_version(0) Chris@909: end Chris@909: Chris@909: Thing.connection.drop_table "things" rescue nil Chris@909: Thing.connection.drop_table "thing_versions" rescue nil Chris@909: Thing.reset_column_information Chris@909: end Chris@909: Chris@909: def test_versioned_migration Chris@909: assert_raises(ActiveRecord::StatementInvalid) { Thing.create :title => 'blah blah' } Chris@909: # take 'er up Chris@909: ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/') Chris@909: t = Thing.create :title => 'blah blah', :price => 123.45, :type => 'Thing' Chris@909: assert_equal 1, t.versions.size Chris@909: Chris@909: # check that the price column has remembered its value correctly Chris@909: assert_equal t.price, t.versions.first.price Chris@909: assert_equal t.title, t.versions.first.title Chris@909: assert_equal t[:type], t.versions.first[:type] Chris@909: Chris@909: # make sure that the precision of the price column has been preserved Chris@909: assert_equal 7, Thing::Version.columns.find{|c| c.name == "price"}.precision Chris@909: assert_equal 2, Thing::Version.columns.find{|c| c.name == "price"}.scale Chris@909: Chris@909: # now lets take 'er back down Chris@909: ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/') Chris@909: assert_raises(ActiveRecord::StatementInvalid) { Thing.create :title => 'blah blah' } Chris@909: end Chris@909: end Chris@909: end