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