aboutsummaryrefslogblamecommitdiffstats
path: root/activerecord/test/cases/schema_definitions_test.rb
blob: d90a95cf58b1fdc79a012196e5142ff4469aae68 (plain) (tree)










































                                                                                                                          
require "cases/helper"

class SchemaDefinitionsTest < ActiveRecord::TestCase

  REGRESSION_SAMPLES = %w{000249 125014 003912 256051 524287}

  test 'fast_string_to_time converts properly' do
    converted = ActiveRecord::ConnectionAdapters::Column.send('fast_string_to_time', "2010-01-12 12:34:56.000249")
    assert_equal Time.mktime(2010, 01, 12, 12, 34, 56, 249), converted
  end

  test 'fallback_string_to_time converts properly' do
    converted = ActiveRecord::ConnectionAdapters::Column.send('fallback_string_to_time', "2010-01-12 12:34:56.000249")
    assert_equal Time.mktime(2010, 01, 12, 12, 34, 56, 249), converted
  end

  test 'fallback_string_to_time converts properly with no microseconds' do
    converted = ActiveRecord::ConnectionAdapters::Column.send('fallback_string_to_time', "2010-01-12 12:34:56")
    assert_equal Time.mktime(2010, 01, 12, 12, 34, 56, 0), converted
  end

  test "fast_string_to_time can handle problematic microseconds" do
    REGRESSION_SAMPLES.each do |u|
      converted = ActiveRecord::ConnectionAdapters::Column.send('fast_string_to_time', "2010-01-12 12:34:56.#{u}")
      assert_equal u.to_i, converted.usec
    end
  end

  test "microseconds can handle problematic microseconds" do
    REGRESSION_SAMPLES.each do |u|
      i = u.to_i
      converted = ActiveRecord::ConnectionAdapters::Column.send('microseconds', {:sec_fraction => Rational(i, 1_000_000)})
      assert_equal i, converted

      converted = ActiveRecord::ConnectionAdapters::Column.send('microseconds', {:sec_fraction => Rational(i, 1_000_000)})
      assert_equal i, converted
    end
  end

  test 'fast constant is equally restrictive' do
    assert_match ActiveRecord::ConnectionAdapters::Column::Format::NEW_ISO_DATETIME, "2010-01-12 12:34:56.555493"
  end
end