From 35f25f643cca00c192d971234942d5a0d0e07cc0 Mon Sep 17 00:00:00 2001 From: Rolf Timmermans Date: Wed, 17 Nov 2010 22:18:25 +0800 Subject: Added tests for Nodes::NotIn. --- test/visitors/test_to_sql.rb | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'test') diff --git a/test/visitors/test_to_sql.rb b/test/visitors/test_to_sql.rb index 8715531bda..b84730eeb4 100644 --- a/test/visitors/test_to_sql.rb +++ b/test/visitors/test_to_sql.rb @@ -132,6 +132,52 @@ module Arel end end + describe "Nodes::NotIn" do + it "should know how to visit" do + node = @attr.not_in [1, 2, 3] + @visitor.accept(node).must_be_like %{ + "users"."id" NOT IN (1, 2, 3) + } + end + + it "should turn empty right to NULL" do + node = @attr.not_in [] + @visitor.accept(node).must_be_like %{ + "users"."id" NOT IN (NULL) + } + end + + it 'can handle two dot ranges' do + node = @attr.not_in 1..3 + @visitor.accept(node).must_be_like %{ + "users"."id" < 1 OR "users"."id" > 3 + } + end + + it 'can handle three dot ranges' do + node = @attr.not_in 1...3 + @visitor.accept(node).must_be_like %{ + "users"."id" < 1 OR "users"."id" >= 3 + } + end + + it 'uses the same column for escaping values' do + @attr = Table.new(:users)[:name] + visitor = Class.new(ToSql) do + attr_accessor :expected + + def quote value, column = nil + raise unless column == expected + super + end + end + in_node = Nodes::NotIn.new @attr, %w{ a b c } + visitor = visitor.new(Table.engine) + visitor.expected = @attr.column + visitor.accept(in_node).must_equal %("users"."name" NOT IN ('a', 'b', 'c')) + end + end + describe 'Equality' do it "should escape strings" do test = Table.new(:users)[:name].eq 'Aaron Patterson' -- cgit v1.2.3