aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/explain_subscriber_test.rb
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2012-02-03 16:06:50 -0800
committerXavier Noria <fxn@hashref.com>2012-02-03 16:10:39 -0800
commit1e5cdbddfca9305fd627a2c6a967d1e410e97100 (patch)
tree85f7489dc02f61b6be599ad7dda3500b3b70550d /activerecord/test/cases/explain_subscriber_test.rb
parent393f797be868c46e9a25c6f07760e4cd69d150ea (diff)
downloadrails-1e5cdbddfca9305fd627a2c6a967d1e410e97100.tar.gz
rails-1e5cdbddfca9305fd627a2c6a967d1e410e97100.tar.bz2
rails-1e5cdbddfca9305fd627a2c6a967d1e410e97100.zip
let automatic EXPLAIN ignore CACHE notifications
Diffstat (limited to 'activerecord/test/cases/explain_subscriber_test.rb')
-rw-r--r--activerecord/test/cases/explain_subscriber_test.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/activerecord/test/cases/explain_subscriber_test.rb b/activerecord/test/cases/explain_subscriber_test.rb
new file mode 100644
index 0000000000..e118add44c
--- /dev/null
+++ b/activerecord/test/cases/explain_subscriber_test.rb
@@ -0,0 +1,48 @@
+require 'cases/helper'
+
+if ActiveRecord::Base.connection.supports_explain?
+ class ExplainSubscriberTest < ActiveRecord::TestCase
+ SUBSCRIBER = ActiveRecord::ExplainSubscriber.new
+
+ def test_collects_nothing_if_available_queries_for_explain_is_nil
+ with_queries(nil) do
+ SUBSCRIBER.call
+ assert_nil Thread.current[:available_queries_for_explain]
+ end
+ end
+
+ def test_collects_nothing_if_the_payload_has_an_exception
+ with_queries([]) do |queries|
+ SUBSCRIBER.call(:exception => Exception.new)
+ assert queries.empty?
+ end
+ end
+
+ def test_collects_nothing_for_ignored_payloads
+ with_queries([]) do |queries|
+ ActiveRecord::ExplainSubscriber::IGNORED_PAYLOADS.each do |ip|
+ SUBSCRIBER.call(:name => ip)
+ end
+ assert queries.empty?
+ end
+ end
+
+ def test_collects_pairs_of_queries_and_binds
+ sql = 'select 1 from users'
+ binds = [1, 2]
+ with_queries([]) do |queries|
+ SUBSCRIBER.call(:name => 'SQL', :sql => sql, :binds => binds)
+ assert_equal 1, queries.size
+ assert_equal sql, queries[0][0]
+ assert_equal binds, queries[0][1]
+ end
+ end
+
+ def with_queries(queries)
+ Thread.current[:available_queries_for_explain] = queries
+ yield queries
+ ensure
+ Thread.current[:available_queries_for_explain] = nil
+ end
+ end
+end \ No newline at end of file