|
1 | 1 | require 'cases/sqlserver_helper' |
2 | 2 | require 'models/topic' |
| 3 | +require 'models_sqlserver/topic' |
3 | 4 |
|
4 | | -class BindParameterTestSqlserver < ActiveRecord::TestCase |
5 | | -end |
6 | | - |
7 | | -class ActiveRecord::BindParameterTest < ActiveRecord::TestCase |
8 | | - |
9 | | - fixtures :topics |
| 5 | +class BindParameterTestSqlServer < ActiveRecord::TestCase |
10 | 6 |
|
11 | 7 | COERCED_TESTS = [ |
12 | | - :test_binds_are_logged |
| 8 | + :test_binds_are_logged, |
| 9 | + :test_binds_are_logged_after_type_cast |
13 | 10 | ] |
14 | 11 |
|
15 | 12 | include SqlserverCoercedTest |
16 | 13 |
|
17 | | - # TODO: put a real test here |
| 14 | + fixtures :topics |
| 15 | + |
| 16 | + class LogListener |
| 17 | + attr_accessor :calls |
| 18 | + |
| 19 | + def initialize |
| 20 | + @calls = [] |
| 21 | + end |
| 22 | + |
| 23 | + def call(*args) |
| 24 | + calls << args |
| 25 | + end |
| 26 | + end |
| 27 | + |
| 28 | + def setup |
| 29 | + super |
| 30 | + @connection = ActiveRecord::Base.connection |
| 31 | + @listener = LogListener.new |
| 32 | + @pk = Topic.columns.find { |c| c.primary } |
| 33 | + ActiveSupport::Notifications.subscribe('sql.active_record', @listener) |
| 34 | + end |
| 35 | + |
| 36 | + def teardown |
| 37 | + ActiveSupport::Notifications.unsubscribe(@listener) |
| 38 | + end |
| 39 | + |
18 | 40 | def test_coerced_binds_are_logged |
19 | | - assert true, 'they are!' |
| 41 | + sub = @connection.substitute_at(@pk, 0) |
| 42 | + binds = [[@pk, 1]] |
| 43 | + sql = "select * from topics where id = #{sub}" |
| 44 | + |
| 45 | + @connection.exec_query(sql, 'SQL', binds) |
| 46 | + |
| 47 | + message = @listener.calls.find { |args| args[4][:sql].include? sql } |
| 48 | + assert_equal binds, message[4][:binds] |
20 | 49 | end |
21 | 50 |
|
| 51 | + def test_coerced_binds_are_logged_after_type_cast |
| 52 | + sub = @connection.substitute_at(@pk, 0) |
| 53 | + binds = [[@pk, "3"]] |
| 54 | + sql = "select * from topics where id = #{sub}" |
22 | 55 |
|
23 | | -end |
| 56 | + @connection.exec_query(sql, 'SQL', binds) |
24 | 57 |
|
| 58 | + message = @listener.calls.find { |args| args[4][:sql].include? sql } |
| 59 | + assert_equal [[@pk, 3]], message[4][:binds] |
| 60 | + end |
25 | 61 |
|
| 62 | +end |
0 commit comments