diff --git a/lib/devise/path_checker.rb b/lib/devise/path_checker.rb index 3605f7e8..d033112a 100644 --- a/lib/devise/path_checker.rb +++ b/lib/devise/path_checker.rb @@ -12,7 +12,8 @@ module Devise end def signing_out? - @current_path == send("destroy_#{@scope}_session_path") + route = "destroy_#{@scope}_session_path" + respond_to?(route) && @current_path == send(route) end end end diff --git a/test/path_checker_test.rb b/test/path_checker_test.rb new file mode 100644 index 00000000..0617f6ff --- /dev/null +++ b/test/path_checker_test.rb @@ -0,0 +1,21 @@ +require 'test_helper' + +class PathCheckerTest < ActiveSupport::TestCase + test 'check if sign out path matches' do + path_checker = Devise::PathChecker.new({"PATH_INFO" => "/users/sign_out"}, :user) + assert path_checker.signing_out? + + path_checker = Devise::PathChecker.new({"PATH_INFO" => "/users/sign_in"}, :user) + assert_not path_checker.signing_out? + end + + test 'considers script name' do + path_checker = Devise::PathChecker.new({"SCRIPT_NAME" => "/users", "PATH_INFO" => "/sign_out"}, :user) + assert path_checker.signing_out? + end + + test 'ignores invalid routes' do + path_checker = Devise::PathChecker.new({"PATH_INFO" => "/users/sign_in"}, :omg) + assert_not path_checker.signing_out? + end +end \ No newline at end of file