test/controller_methods_test.rb in airbrake-4.3.1 vs test/controller_methods_test.rb in airbrake-4.3.2
- old
+ new
@@ -27,21 +27,50 @@
def current_member
OpenStruct.new(:id => 321, :name => 'mamba')
end
end
+class CurrentUserErrorTestController < TestController
+ def current_user
+ fail 'Testing broken implementation for #current_user'
+ end
+end
+class CurrentMemberErrorTestController < TestController
+ def current_member
+ fail 'Testing broken implementation for #current_member'
+ end
+end
+
+class CurrentUserAttributeErrorTestController < TestController
+ def current_user
+ user = OpenStruct.new(:id => 123)
+ def user.name
+ fail 'Testing attribute that raises error on #current_user'
+ end
+ user
+ end
+end
+
class NoSessionTestController < TestController
def session
nil
end
end
+class ParamTestController < TestController
+ QUERY_PARAMS = { name: "|" } # URI parameter with invalid character
+ def request
+ query = QUERY_PARAMS.map { |k, v| "#{k}=#{v}"}.join("&")
+ OpenStruct.new(:port=> 80, :protocol => 'http://', host: 'example.com', :fullpath => "path?#{query}", :env => [])
+ end
+end
+
class ControllerMethodsTest < Test::Unit::TestCase
include DefinesConstants
- context "#airbrake_current_user" do
+ context "#airbrake_request_data" do
context "without a logged in user" do
setup do
NilClass.class_eval do
@@called = false
@@ -57,11 +86,11 @@
@controller = NilUserTestController.new
end
should "not call #id on NilClass" do
- @controller.send(:airbrake_current_user)
+ @controller.airbrake_request_data
assert_equal false, NilClass.called
end
end
context "with a logged in User" do
@@ -100,10 +129,36 @@
::POOL.expects(:release_connection)
CurrentUserTestController.new.airbrake_request_data
end
end
+
+ context 'when loading the user raises an error' do
+ should 'send empty user info to Ab when current_user fails' do
+ Airbrake.configuration.user_attributes = %w(id)
+ controller = CurrentUserErrorTestController.new
+ ab_data = controller.airbrake_request_data
+
+ assert_equal( { }, ab_data[:user] )
+ end
+
+ should 'send empty user info to Ab when current_member fails' do
+ Airbrake.configuration.user_attributes = %w(id)
+ controller = CurrentMemberErrorTestController.new
+ ab_data = controller.airbrake_request_data
+
+ assert_equal( { }, ab_data[:user] )
+ end
+
+ should 'exclude any user attributes that raise an error' do
+ Airbrake.configuration.user_attributes = %w(id name)
+ controller = CurrentUserAttributeErrorTestController.new
+ ab_data = controller.airbrake_request_data
+
+ assert_equal( {:id => 123}, ab_data[:user])
+ end
+ end
end
context '#airbrake_session_data' do
setup do
@controller = NoSessionTestController.new
@@ -119,9 +174,14 @@
@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
+
+ should "handle invalid character in param" do
+ request_url = ParamTestController.new.send(:airbrake_request_url)
+ assert_equal request_url, "http://example.com/path?name=|"
end
end
context "Rails 3" do
setup do