1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/test/test_attributes.rb
Ernie Miller 6e638bba59 Add equality to ALL THE THINGS (that matter)
People are often trying to use ARel nodes inside ActiveRecord, and when
they do so, lots of things can break, because ActiveRecord relies on
Array#uniq and sometimes hash key equality to handle values that end up
in wheres, havings, etc. By implementing equality for all the nodes, we
should hopefully be able to prevent any nodes (even nodes containing
other nodes) from failing an equality check they should otherwise pass,
and alleviate many of these errors.

Fixes #130
2012-08-18 22:33:25 -04:00

66 lines
2 KiB
Ruby

require '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