1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/cases/bind_parameter_test.rb
Rafael Mendonça França bd09afb5fb Don't skip tests if we don't need to.
We can conditional define the tests depending on the adapter or
connection.

Lets keep the skip for fail tests that need to be fixed.
2013-11-08 13:59:07 -02:00

83 lines
2 KiB
Ruby

require 'cases/helper'
require 'models/topic'
module ActiveRecord
class BindParameterTest < ActiveRecord::TestCase
fixtures :topics
class LogListener
attr_accessor :calls
def initialize
@calls = []
end
def call(*args)
calls << args
end
end
def setup
super
@connection = ActiveRecord::Base.connection
@listener = LogListener.new
@pk = Topic.columns.find { |c| c.primary }
ActiveSupport::Notifications.subscribe('sql.active_record', @listener)
end
def teardown
ActiveSupport::Notifications.unsubscribe(@listener)
end
if ActiveRecord::Base.connection.supports_statement_cache?
def test_binds_are_logged
sub = @connection.substitute_at(@pk, 0)
binds = [[@pk, 1]]
sql = "select * from topics where id = #{sub}"
@connection.exec_query(sql, 'SQL', binds)
message = @listener.calls.find { |args| args[4][:sql] == sql }
assert_equal binds, message[4][:binds]
end
def test_find_one_uses_binds
Topic.find(1)
binds = [[@pk, 1]]
message = @listener.calls.find { |args| args[4][:binds] == binds }
assert message, 'expected a message with binds'
end
def test_logs_bind_vars
pk = Topic.columns.find { |x| x.primary }
payload = {
:name => 'SQL',
:sql => 'select * from topics where id = ?',
:binds => [[pk, 10]]
}
event = ActiveSupport::Notifications::Event.new(
'foo',
Time.now,
Time.now,
123,
payload)
logger = Class.new(ActiveRecord::LogSubscriber) {
attr_reader :debugs
def initialize
super
@debugs = []
end
def debug str
@debugs << str
end
}.new
logger.sql event
assert_match([[pk.name, 10]].inspect, logger.debugs.first)
end
end
end
end