aboutsummaryrefslogtreecommitdiffstats
path: root/test/nodes/test_table_alias.rb
diff options
context:
space:
mode:
authorErnie Miller <ernie@erniemiller.org>2012-08-18 22:33:25 -0400
committerErnie Miller <ernie@erniemiller.org>2012-08-18 22:33:25 -0400
commit6e638bba594b6164190d2a6fb96ffa07a20b11f3 (patch)
tree2d54111a8fc8ef4a892739f07990158df73c3c4e /test/nodes/test_table_alias.rb
parent1de1041c00abff9cfc57837a80e12157901ff194 (diff)
downloadrails-6e638bba594b6164190d2a6fb96ffa07a20b11f3.tar.gz
rails-6e638bba594b6164190d2a6fb96ffa07a20b11f3.tar.bz2
rails-6e638bba594b6164190d2a6fb96ffa07a20b11f3.zip
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
Diffstat (limited to 'test/nodes/test_table_alias.rb')
-rw-r--r--test/nodes/test_table_alias.rb24
1 files changed, 22 insertions, 2 deletions
diff --git a/test/nodes/test_table_alias.rb b/test/nodes/test_table_alias.rb
index fef24bb19e..4aafd12b79 100644
--- a/test/nodes/test_table_alias.rb
+++ b/test/nodes/test_table_alias.rb
@@ -5,12 +5,32 @@ module Arel
module Nodes
describe 'table alias' do
it 'has an #engine which delegates to the relation' do
- engine = Object.new
- relation = OpenStruct.new(:engine => engine)
+ engine = 'vroom'
+ relation = Table.new(:users, engine)
node = TableAlias.new relation, :foo
node.engine.must_equal engine
end
+
+ describe 'equality' do
+ it 'is equal with equal ivars' do
+ relation1 = Table.new(:users, 'vroom')
+ node1 = TableAlias.new relation1, :foo
+ relation2 = Table.new(:users, 'vroom')
+ node2 = TableAlias.new relation2, :foo
+ array = [node1, node2]
+ assert_equal 1, array.uniq.size
+ end
+
+ it 'is not equal with different ivars' do
+ relation1 = Table.new(:users, 'vroom')
+ node1 = TableAlias.new relation1, :foo
+ relation2 = Table.new(:users, 'vroom')
+ node2 = TableAlias.new relation2, :bar
+ array = [node1, node2]
+ assert_equal 2, array.uniq.size
+ end
+ end
end
end
end