aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/arel/attributes_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/cases/arel/attributes_test.rb')
-rw-r--r--activerecord/test/cases/arel/attributes_test.rb67
1 files changed, 67 insertions, 0 deletions
diff --git a/activerecord/test/cases/arel/attributes_test.rb b/activerecord/test/cases/arel/attributes_test.rb
new file mode 100644
index 0000000000..e17a6f5fd2
--- /dev/null
+++ b/activerecord/test/cases/arel/attributes_test.rb
@@ -0,0 +1,67 @@
+# frozen_string_literal: true
+require_relative 'helper'
+
+module Arel
+ describe 'Attributes' do
+ it 'responds to lower' do
+ relation = Table.new(:users)
+ attribute = relation[:foo]
+ node = attribute.lower
+ assert_equal 'LOWER', node.name
+ assert_equal [attribute], node.expressions
+ end
+
+ describe 'equality' do
+ it 'is equal with equal ivars' do
+ array = [Attribute.new('foo', 'bar'), Attribute.new('foo', 'bar')]
+ assert_equal 1, array.uniq.size
+ end
+
+ it 'is not equal with different ivars' do
+ array = [Attribute.new('foo', 'bar'), Attribute.new('foo', 'baz')]
+ assert_equal 2, array.uniq.size
+ end
+ end
+
+ describe 'for' do
+ it 'deals with unknown column types' do
+ column = Struct.new(:type).new :crazy
+ Attributes.for(column).must_equal Attributes::Undefined
+ end
+
+ it 'returns the correct constant for strings' do
+ [:string, :text, :binary].each do |type|
+ column = Struct.new(:type).new type
+ Attributes.for(column).must_equal Attributes::String
+ end
+ end
+
+ it 'returns the correct constant for ints' do
+ column = Struct.new(:type).new :integer
+ Attributes.for(column).must_equal Attributes::Integer
+ end
+
+ it 'returns the correct constant for floats' do
+ column = Struct.new(:type).new :float
+ Attributes.for(column).must_equal Attributes::Float
+ end
+
+ it 'returns the correct constant for decimals' do
+ column = Struct.new(:type).new :decimal
+ Attributes.for(column).must_equal Attributes::Decimal
+ end
+
+ it 'returns the correct constant for boolean' do
+ column = Struct.new(:type).new :boolean
+ Attributes.for(column).must_equal Attributes::Boolean
+ end
+
+ it 'returns the correct constant for time' do
+ [:date, :datetime, :timestamp, :time].each do |type|
+ column = Struct.new(:type).new type
+ Attributes.for(column).must_equal Attributes::Time
+ end
+ end
+ end
+ end
+end