Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

root/branches/2-1-caching/activerecord/test/defaults_test.rb

Revision 8272, 2.4 kB (checked in by bitsweat, 1 year ago)

MySQL: we can't distinguish a fake 0 default in 4.x

Line 
1 require 'abstract_unit'
2 require 'fixtures/default'
3 require 'fixtures/entrant'
4
5 class DefaultTest < Test::Unit::TestCase
6   def test_nil_defaults_for_not_null_columns
7     column_defaults =
8       if current_adapter?(:MysqlAdapter)
9         { 'id' => nil, 'name' => '',  'course_id' => nil }
10       else
11         { 'id' => nil, 'name' => nil, 'course_id' => nil }
12       end
13
14     column_defaults.each do |name, default|
15       column = Entrant.columns_hash[name]
16       assert !column.null, "#{name} column should be NOT NULL"
17       assert_equal default, column.default, "#{name} column should be DEFAULT #{default.inspect}"
18     end
19   end
20
21   if current_adapter?(:MysqlAdapter)
22     # MySQL uses an implicit default 0 rather than NULL unless in strict mode.
23     # We use an implicit NULL so schema.rb is compatible with other databases.
24     def test_mysql_integer_not_null_defaults
25       klass = Class.new(ActiveRecord::Base)
26       klass.table_name = 'test_integer_not_null_default_zero'
27       klass.connection.create_table klass.table_name do |t|
28         t.column :zero, :integer, :null => false, :default => 0
29         t.column :omit, :integer, :null => false
30       end
31
32       assert_equal 0, klass.columns_hash['zero'].default
33       assert !klass.columns_hash['zero'].null
34       # 0 in MySQL 4, nil in 5.
35       assert [0, nil].include?(klass.columns_hash['omit'].default)
36       assert !klass.columns_hash['omit'].null
37
38       assert_raise(ActiveRecord::StatementInvalid) { klass.create! }
39
40       assert_nothing_raised do
41         instance = klass.create!(:omit => 1)
42         assert_equal 0, instance.zero
43         assert_equal 1, instance.omit
44       end
45     ensure
46       klass.connection.drop_table(klass.table_name) rescue nil
47     end
48   end
49
50   if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter, :FirebirdAdapter, :OpenBaseAdapter, :OracleAdapter)
51     def test_default_integers
52       default = Default.new
53       assert_instance_of Fixnum, default.positive_integer
54       assert_equal 1, default.positive_integer
55       assert_instance_of Fixnum, default.negative_integer
56       assert_equal -1, default.negative_integer
57       assert_instance_of BigDecimal, default.decimal_number
58       assert_equal BigDecimal.new("2.78"), default.decimal_number
59     end
60   end
61
62   if current_adapter?(:PostgreSQLAdapter)
63     def test_multiline_default_text
64       assert_equal "--- []\n\n", Default.columns_hash['multiline_default'].default
65     end
66   end
67 end
Note: See TracBrowser for help on using the browser.