diff options
Diffstat (limited to 'activerecord/test/cases/adapters/postgresql/datatype_test.rb')
-rw-r--r-- | activerecord/test/cases/adapters/postgresql/datatype_test.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/activerecord/test/cases/adapters/postgresql/datatype_test.rb b/activerecord/test/cases/adapters/postgresql/datatype_test.rb new file mode 100644 index 0000000000..b7535d5c9a --- /dev/null +++ b/activerecord/test/cases/adapters/postgresql/datatype_test.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +require "cases/helper" +require "support/ddl_helper" + +class PostgresqlTime < ActiveRecord::Base +end + +class PostgresqlOid < ActiveRecord::Base +end + +class PostgresqlLtree < ActiveRecord::Base +end + +class PostgresqlDataTypeTest < ActiveRecord::PostgreSQLTestCase + self.use_transactional_tests = false + + def setup + @connection = ActiveRecord::Base.connection + + @connection.execute("INSERT INTO postgresql_times (id, time_interval, scaled_time_interval) VALUES (1, '1 year 2 days ago', '3 weeks ago')") + @first_time = PostgresqlTime.find(1) + + @connection.execute("INSERT INTO postgresql_oids (id, obj_id) VALUES (1, 1234)") + @first_oid = PostgresqlOid.find(1) + end + + teardown do + [PostgresqlTime, PostgresqlOid].each(&:delete_all) + end + + def test_data_type_of_time_types + assert_equal :interval, @first_time.column_for_attribute(:time_interval).type + assert_equal :interval, @first_time.column_for_attribute(:scaled_time_interval).type + end + + def test_data_type_of_oid_types + assert_equal :oid, @first_oid.column_for_attribute(:obj_id).type + end + + def test_time_values + assert_equal "-1 years -2 days", @first_time.time_interval + assert_equal "-21 days", @first_time.scaled_time_interval + end + + def test_oid_values + assert_equal 1234, @first_oid.obj_id + end + + def test_update_time + @first_time.time_interval = "2 years 3 minutes" + assert @first_time.save + assert @first_time.reload + assert_equal "2 years 00:03:00", @first_time.time_interval + end + + def test_update_oid + new_value = 567890 + @first_oid.obj_id = new_value + assert @first_oid.save + assert @first_oid.reload + assert_equal new_value, @first_oid.obj_id + end + + def test_text_columns_are_limitless_the_upper_limit_is_one_GB + assert_equal "text", @connection.type_to_sql(:text, limit: 100_000) + assert_raise ActiveRecord::ActiveRecordError do + @connection.type_to_sql(:text, limit: 4294967295) + end + end +end + +class PostgresqlInternalDataTypeTest < ActiveRecord::PostgreSQLTestCase + include DdlHelper + + setup do + @connection = ActiveRecord::Base.connection + end + + def test_name_column_type + with_example_table @connection, "ex", "data name" do + column = @connection.columns("ex").find { |col| col.name == "data" } + assert_equal :string, column.type + end + end + + def test_char_column_type + with_example_table @connection, "ex", 'data "char"' do + column = @connection.columns("ex").find { |col| col.name == "data" } + assert_equal :string, column.type + end + end +end |