Chris@0
|
1 require File.join(File.dirname(__FILE__), 'abstract_unit')
|
Chris@0
|
2
|
Chris@0
|
3 if ActiveRecord::Base.connection.supports_migrations?
|
Chris@0
|
4 class Thing < ActiveRecord::Base
|
Chris@0
|
5 attr_accessor :version
|
Chris@0
|
6 acts_as_versioned
|
Chris@0
|
7 end
|
Chris@0
|
8
|
Chris@0
|
9 class MigrationTest < Test::Unit::TestCase
|
Chris@0
|
10 self.use_transactional_fixtures = false
|
Chris@0
|
11 def teardown
|
Chris@0
|
12 if ActiveRecord::Base.connection.respond_to?(:initialize_schema_information)
|
Chris@0
|
13 ActiveRecord::Base.connection.initialize_schema_information
|
Chris@0
|
14 ActiveRecord::Base.connection.update "UPDATE schema_info SET version = 0"
|
Chris@0
|
15 else
|
Chris@0
|
16 ActiveRecord::Base.connection.initialize_schema_migrations_table
|
Chris@0
|
17 ActiveRecord::Base.connection.assume_migrated_upto_version(0)
|
Chris@0
|
18 end
|
Chris@0
|
19
|
Chris@0
|
20 Thing.connection.drop_table "things" rescue nil
|
Chris@0
|
21 Thing.connection.drop_table "thing_versions" rescue nil
|
Chris@0
|
22 Thing.reset_column_information
|
Chris@0
|
23 end
|
Chris@0
|
24
|
Chris@0
|
25 def test_versioned_migration
|
Chris@0
|
26 assert_raises(ActiveRecord::StatementInvalid) { Thing.create :title => 'blah blah' }
|
Chris@0
|
27 # take 'er up
|
Chris@0
|
28 ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/')
|
Chris@0
|
29 t = Thing.create :title => 'blah blah', :price => 123.45, :type => 'Thing'
|
Chris@0
|
30 assert_equal 1, t.versions.size
|
Chris@0
|
31
|
Chris@0
|
32 # check that the price column has remembered its value correctly
|
Chris@0
|
33 assert_equal t.price, t.versions.first.price
|
Chris@0
|
34 assert_equal t.title, t.versions.first.title
|
Chris@0
|
35 assert_equal t[:type], t.versions.first[:type]
|
Chris@0
|
36
|
Chris@0
|
37 # make sure that the precision of the price column has been preserved
|
Chris@0
|
38 assert_equal 7, Thing::Version.columns.find{|c| c.name == "price"}.precision
|
Chris@0
|
39 assert_equal 2, Thing::Version.columns.find{|c| c.name == "price"}.scale
|
Chris@0
|
40
|
Chris@0
|
41 # now lets take 'er back down
|
Chris@0
|
42 ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/')
|
Chris@0
|
43 assert_raises(ActiveRecord::StatementInvalid) { Thing.create :title => 'blah blah' }
|
Chris@0
|
44 end
|
Chris@0
|
45 end
|
Chris@0
|
46 end
|