# frozen_string_literal: true
require "cases/helper"
unless current_adapter?(:PostgreSQLAdapter) # PostgreSQL does not use type strings for lookup
module ActiveRecord
module ConnectionAdapters
class TypeLookupTest < ActiveRecord::TestCase
setup do
@connection = ActiveRecord::Base.connection
end
def test_boolean_types
assert_lookup_type :boolean, "boolean"
assert_lookup_type :boolean, "BOOLEAN"
end
def test_string_types
assert_lookup_type :string, "char"
assert_lookup_type :string, "varchar"
assert_lookup_type :string, "VARCHAR"
assert_lookup_type :string, "varchar(255)"
assert_lookup_type :string, "character varying"
end
def test_binary_types
assert_lookup_type :binary, "binary"
assert_lookup_type :binary, "BINARY"
assert_lookup_type :binary, "blob"
assert_lookup_type :binary, "BLOB"
end
def test_text_types
assert_lookup_type :text, "text"
assert_lookup_type :text, "TEXT"
assert_lookup_type :text, "clob"
assert_lookup_type :text, "CLOB"
end
def test_date_types
assert_lookup_type :date, "date"
assert_lookup_type :date, "DATE"
end
def test_time_types
assert_lookup_type :time, "time"
assert_lookup_type :time, "TIME"
end
def test_datetime_types
assert_lookup_type :datetime, "datetime"
assert_lookup_type :datetime, "DATETIME"
assert_lookup_type :datetime, "timestamp"
assert_lookup_type :datetime, "TIMESTAMP"
end
def test_decimal_types
assert_lookup_type :decimal, "decimal"
assert_lookup_type :decimal, "decimal(2,8)"
assert_lookup_type :decimal, "DECIMAL"
assert_lookup_type :decimal, "numeric"
assert_lookup_type :decimal, "numeric(2,8)"
assert_lookup_type :decimal, "NUMERIC"
assert_lookup_type :decimal, "number"
assert_lookup_type :decimal, "number(2,8)"
assert_lookup_type :decimal, "NUMBER"
end
def test_float_types
assert_lookup_type :float, "float"
assert_lookup_type :float, "FLOAT"
assert_lookup_type :float, "double"
assert_lookup_type :float, "DOUBLE"
end
def test_integer_types
assert_lookup_type :integer, "integer"
assert_lookup_type :integer, "INTEGER"
assert_lookup_type :integer, "tinyint"
assert_lookup_type :integer, "smallint"
assert_lookup_type :integer, "bigint"
end
def test_bigint_limit
limit = @connection.send(:type_map).lookup("bigint").send(:_limit)
if current_adapter?(:OracleAdapter)
assert_equal 19, limit
else
assert_equal 8, limit
end
end
def test_decimal_without_scale
if current_adapter?(:OracleAdapter)
{
decimal: %w{decimal(2) decimal(2,0) numeric(2) numeric(2,0)},
integer: %w{number(2) number(2,0)}
}
else
{ decimal: %w{decimal(2) decimal(2,0) numeric(2) numeric(2,0) number(2) number(2,0)} }
end.each do |expected_type, types|
types.each do |type|
cast_type = @connection.send(:type_map).lookup(type)
assert_equal expected_type, cast_type.type
assert_equal 2, cast_type.cast(2.1)
end
end
end
private
def assert_lookup_type(type, lookup)
cast_type = @connection.send(:type_map).lookup(lookup)
assert_equal type, cast_type.type
end
end
end
end
end