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