test/controller_methods_test.rb in airbrake-4.1.0 vs test/controller_methods_test.rb in airbrake-4.2.0
- old
+ new
@@ -1,49 +1,108 @@
require File.expand_path '../helper', __FILE__
require 'airbrake/rails/controller_methods'
-
class TestController
include Airbrake::Rails::ControllerMethods
+ def params; {}; end
+ def session; nil; end
+ def request
+ OpenStruct.new(:port=> 80, :protocol => 'http://', host: 'example.com', :fullpath => 'path', :env => [])
+ end
+end
+
+class NilUserTestController < TestController
def current_user
nil
end
end
-class NoSessionTestController
- include Airbrake::Rails::ControllerMethods
+class CurrentUserTestController < TestController
+ def current_user
+ OpenStruct.new(:id => 123, :name => 'tape')
+ end
+end
+class CurrentMemberTestController < TestController
+ def current_member
+ OpenStruct.new(:id => 321, :name => 'mamba')
+ end
+end
+
+
+class NoSessionTestController < TestController
def session
nil
end
end
-
-
class ControllerMethodsTest < Test::Unit::TestCase
+ include DefinesConstants
+
context "#airbrake_current_user" do
- setup do
+ context "without a logged in user" do
+ setup do
- NilClass.class_eval do
- @@called = false
+ NilClass.class_eval do
+ @@called = false
- def self.called
- !! @@called
- end
+ def self.called
+ !! @@called
+ end
- def id
- @@called = true
+ def id
+ @@called = true
+ end
end
+
+ @controller = NilUserTestController.new
end
- @controller = TestController.new
+ should "not call #id on NilClass" do
+ @controller.send(:airbrake_current_user)
+ assert_equal false, NilClass.called
+ end
end
- should "not call #id on NilClass" do
- @controller.send(:airbrake_current_user)
- assert_equal false, NilClass.called
+ context "with a logged in User" do
+ teardown do
+ Object.__send__(:remove_const, :ActiveRecord) if defined?(ActiveRecord)
+ Object.__send__(:remove_const, :POOL) if defined?(POOL)
+ end
+ should 'include user info in the data sent to Ab' do
+ Airbrake.configuration.user_attributes = %w(id)
+ controller = CurrentUserTestController.new
+ ab_data = controller.airbrake_request_data
+
+ assert_equal( {:id => 123}, ab_data[:user])
+ end
+
+ should 'include more info if asked to, discarding unknown attributes' do
+ Airbrake.configuration.user_attributes = %w(id name collar-size)
+
+ controller = CurrentUserTestController.new
+ ab_data = controller.airbrake_request_data
+
+ assert_equal( {:id => 123, :name => 'tape'}, ab_data[:user])
+ end
+
+ should 'work with a "current_member" method too' do
+ Airbrake.configuration.user_attributes = %w(id)
+ controller = CurrentMemberTestController.new
+ ab_data = controller.airbrake_request_data
+
+ assert_equal( {:id => 321}, ab_data[:user])
+ end
+
+ should "release DB connections" do
+ ::POOL = Object.new
+ module ::ActiveRecord; class Base; def self.connection_pool; ::POOL; end; end; end
+ ::POOL.expects(:release_connection)
+
+ CurrentUserTestController.new.airbrake_request_data
+ end
end
end
context '#airbrake_session_data' do
setup do
@@ -53,25 +112,60 @@
no_session = @controller.send(:airbrake_session_data)
assert_equal no_session, {:session => 'no session found'}
end
end
+ context "#airbrake_request_url" do
+ setup do
+ @controller = NoSessionTestController.new
+ end
+ should "return correct request url" do
+ request_url = @controller.send(:airbrake_request_url)
+ assert_equal request_url, "http://example.com/path"
+ end
+ end
+
context "Rails 3" do
setup do
- @controller = TestController.new
+ @controller = NilUserTestController.new
::Rails = Object.new
::Rails.stubs(:version).returns("3.2.17")
end
- should "respond to rails3? with true" do
- assert @controller.send(:rails3?)
+
+ should "respond to rails_3_or_4? with true" do
+ assert @controller.send(:rails_3_or_4?)
end
+
should "call filter_rails3_parameters" do
hash = {:a => "b"}
filtered_hash = {:c => "d"}
@controller.expects(:filter_rails3_parameters).with(hash).
returns(filtered_hash)
assert_equal filtered_hash,
@controller.send(:airbrake_filter_if_filtering, hash)
end
end
+
+ context "Rails 4.x" do
+ setup do
+ @controller = TestController.new
+ ::Rails = Object.new
+ ::Rails.stubs(:version).returns("4.5.6.7")
+ end
+
+ should 'be true when running Rails 4.x' do
+ assert @controller.send(:rails_3_or_4?)
+ end
+
+ should "call filter_rails3_parameters" do
+ hash = {:a => "b"}
+ filtered_hash = {:c => "d"}
+
+ @controller.expects(:filter_rails3_parameters).with(hash).
+ returns(filtered_hash)
+ assert_equal filtered_hash,
+ @controller.send(:airbrake_filter_if_filtering, hash)
+ end
+ end
+
end