test/where_test.rb in ambition-0.1.5 vs test/where_test.rb in ambition-0.1.6

- old
+ new

@@ -45,10 +45,16 @@ specify "array.include? item" do sql = User.select { |m| [1, 2, 3, 4].include? m.id }.to_sql sql.should == "SELECT * FROM users WHERE users.id IN (1, 2, 3, 4)" end + specify "variable'd array.include? item" do + array = [1, 2, 3, 4] + sql = User.select { |m| array.include? m.id }.to_sql + sql.should == "SELECT * FROM users WHERE users.id IN (1, 2, 3, 4)" + end + specify "simple == with variables" do me = 'chris' sql = User.select { |m| m.name == me }.to_sql sql.should == "SELECT * FROM users WHERE users.name = '#{me}'" end @@ -142,16 +148,94 @@ end end context "Where (using detect)" do specify "simple ==" do - conditions = { :conditions => "users.name = 'chris'", :limit => '1' } - User.expects(:find).with(:first, conditions) + User.expects(:select).returns(mock(:first => true)) User.detect { |m| m.name == 'chris' } end specify "nothing found" do - conditions = { :conditions => "users.name = 'chris'", :limit => '1' } - User.expects(:find).with(:first, conditions).returns(nil) + User.expects(:select).returns(mock(:first => nil)) User.detect { |m| m.name == 'chris' }.should.be.nil + end +end + +context "Where (using [])" do + specify "finds a single row" do + User.expects(:find).with(1) + User[1] + end +end + +context "PostgreSQL specific" do + setup do + ActiveRecord::Base.connection = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.new 'fake_connection', 'fake_logger' + end + + teardown do + ActiveRecord::Base.remove_connection + end + + specify "quoting of column name" do + me = 'chris' + sql = User.select { |m| m.name == me }.to_sql + sql.should == %(SELECT * FROM users WHERE users."name" = '#{me}') + end + + specify "simple =~ with regexp" do + sql = User.select { |m| m.name =~ /chris/ }.to_sql + sql.should == %(SELECT * FROM users WHERE users."name" ~ 'chris') + end + + specify "insensitive =~" do + sql = User.select { |m| m.name =~ /chris/i }.to_sql + sql.should == %(SELECT * FROM users WHERE users."name" ~* 'chris') + end + + specify "negated =~" do + sql = User.select { |m| m.name !~ /chris/ }.to_sql + sql.should == %(SELECT * FROM users WHERE users."name" !~ 'chris') + end + + specify "negated insensitive =~" do + sql = User.select { |m| m.name !~ /chris/i }.to_sql + sql.should == %(SELECT * FROM users WHERE users."name" !~* 'chris') + end +end + +context "MySQL specific" do + setup do + ActiveRecord::Base.connection = ActiveRecord::ConnectionAdapters::MysqlAdapter.new('connection', 'logger', 'options', 'config') + end + + teardown do + ActiveRecord::Base.remove_connection + end + + specify "quoting of column name" do + me = 'chris' + sql = User.select { |m| m.name == me }.to_sql + sql.should == "SELECT * FROM users WHERE users.`name` = '#{me}'" + end + + specify "simple =~ with regexp" do + sql = User.select { |m| m.name =~ /chris/ }.to_sql + sql.should == "SELECT * FROM users WHERE users.`name` REGEXP 'chris'" + end +end + +context "Adapter without overrides" do + setup do + ActiveRecord::Base.connection = ActiveRecord::ConnectionAdapters::FakeAdapter.new('connection', 'logger') + end + + teardown do + ActiveRecord::Base.remove_connection + end + + specify "quoting of column name" do + me = 'chris' + sql = User.select { |m| m.name == me }.to_sql + sql.should == "SELECT * FROM users WHERE users.name = '#{me}'" end end