2017-07-24 16:38:04 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-06 12:54:50 -04:00
|
|
|
require "abstract_unit"
|
2009-02-27 23:49:44 -05:00
|
|
|
|
|
|
|
module AbstractController
|
|
|
|
module Testing
|
|
|
|
class ControllerWithCallbacks < AbstractController::Base
|
2009-05-07 11:29:22 -04:00
|
|
|
include AbstractController::Callbacks
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
class Callback1 < ControllerWithCallbacks
|
2009-06-03 00:41:31 -04:00
|
|
|
set_callback :process_action, :before, :first
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def first
|
|
|
|
@text = "Hello world"
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def index
|
|
|
|
self.response_body = @text
|
|
|
|
end
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-08-26 03:18:52 -04:00
|
|
|
class TestCallbacks1 < ActiveSupport::TestCase
|
2009-02-27 23:49:44 -05:00
|
|
|
test "basic callbacks work" do
|
2009-08-26 03:18:52 -04:00
|
|
|
controller = Callback1.new
|
2011-01-18 17:55:20 -05:00
|
|
|
controller.process(:index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "Hello world", controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Callback2 < ControllerWithCallbacks
|
2012-12-07 15:24:56 -05:00
|
|
|
before_action :first
|
|
|
|
after_action :second
|
|
|
|
around_action :aroundz
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def first
|
|
|
|
@text = "Hello world"
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def second
|
|
|
|
@second = "Goodbye"
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def aroundz
|
|
|
|
@aroundz = "FIRST"
|
|
|
|
yield
|
2017-07-24 16:38:04 -04:00
|
|
|
@aroundz += "SECOND"
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def index
|
2010-09-28 17:25:52 -04:00
|
|
|
@text ||= nil
|
2010-06-22 01:57:02 -04:00
|
|
|
self.response_body = @text.to_s
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Callback2Overwrite < Callback2
|
2012-12-07 15:24:56 -05:00
|
|
|
before_action :first, except: :index
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-08-26 03:18:52 -04:00
|
|
|
class TestCallbacks2 < ActiveSupport::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = Callback2.new
|
|
|
|
end
|
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "before_action works" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "Hello world", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "after_action works" do
|
2009-08-26 03:18:52 -04:00
|
|
|
@controller.process(:index)
|
|
|
|
assert_equal "Goodbye", @controller.instance_variable_get("@second")
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "around_action works" do
|
2009-08-26 03:18:52 -04:00
|
|
|
@controller.process(:index)
|
|
|
|
assert_equal "FIRSTSECOND", @controller.instance_variable_get("@aroundz")
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-06-22 01:57:02 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "before_action with overwritten condition" do
|
2010-06-22 01:57:02 -04:00
|
|
|
@controller = Callback2Overwrite.new
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2010-06-22 01:57:02 -04:00
|
|
|
assert_equal "", @controller.response_body
|
|
|
|
end
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
class Callback3 < ControllerWithCallbacks
|
2012-12-07 12:54:26 -05:00
|
|
|
before_action do |c|
|
2009-02-27 23:49:44 -05:00
|
|
|
c.instance_variable_set("@text", "Hello world")
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 12:54:26 -05:00
|
|
|
after_action do |c|
|
2009-02-27 23:49:44 -05:00
|
|
|
c.instance_variable_set("@second", "Goodbye")
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def index
|
|
|
|
self.response_body = @text
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-08-26 03:18:52 -04:00
|
|
|
class TestCallbacks3 < ActiveSupport::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = Callback3.new
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "before_action works with procs" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "Hello world", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "after_action works with procs" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "Goodbye", @controller.instance_variable_get("@second")
|
2010-08-14 01:13:00 -04:00
|
|
|
end
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
class CallbacksWithConditions < ControllerWithCallbacks
|
2016-08-06 13:35:13 -04:00
|
|
|
before_action :list, only: :index
|
|
|
|
before_action :authenticate, except: :index
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def index
|
|
|
|
self.response_body = @list.join(", ")
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def sekrit_data
|
|
|
|
self.response_body = (@list + [@authenticated]).join(", ")
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
private
|
2016-08-06 13:55:02 -04:00
|
|
|
def list
|
|
|
|
@list = ["Hello", "World"]
|
|
|
|
end
|
|
|
|
|
|
|
|
def authenticate
|
|
|
|
@list ||= []
|
|
|
|
@authenticated = "true"
|
|
|
|
end
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-08-26 03:18:52 -04:00
|
|
|
class TestCallbacksWithConditions < ActiveSupport::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = CallbacksWithConditions.new
|
|
|
|
end
|
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "when :only is specified, a before action is triggered on that action" do
|
2009-08-26 03:18:52 -04:00
|
|
|
@controller.process(:index)
|
|
|
|
assert_equal "Hello, World", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "when :only is specified, a before action is not triggered on other actions" do
|
2009-08-26 03:18:52 -04:00
|
|
|
@controller.process(:sekrit_data)
|
|
|
|
assert_equal "true", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "when :except is specified, an after action is not triggered on that action" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not @controller.instance_variable_defined?("@authenticated")
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2020-03-09 19:24:44 -04:00
|
|
|
class CallbacksWithReusedConditions < ControllerWithCallbacks
|
|
|
|
options = { only: :index }
|
|
|
|
before_action :list, options
|
|
|
|
before_action :authenticate, options
|
|
|
|
|
|
|
|
def index
|
|
|
|
self.response_body = @list.join(", ")
|
|
|
|
end
|
|
|
|
|
|
|
|
def public_data
|
|
|
|
@authenticated = "false"
|
|
|
|
self.response_body = @authenticated
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def list
|
|
|
|
@list = ["Hello", "World"]
|
|
|
|
end
|
|
|
|
|
|
|
|
def authenticate
|
|
|
|
@list ||= []
|
|
|
|
@authenticated = "true"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class TestCallbacksWithReusedConditions < ActiveSupport::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = CallbacksWithReusedConditions.new
|
|
|
|
end
|
|
|
|
|
|
|
|
test "when :only is specified, both actions triggered on that action" do
|
|
|
|
@controller.process(:index)
|
|
|
|
assert_equal "Hello, World", @controller.response_body
|
|
|
|
assert_equal "true", @controller.instance_variable_get("@authenticated")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "when :only is specified, both actions are not triggered on other actions" do
|
|
|
|
@controller.process(:public_data)
|
|
|
|
assert_equal "false", @controller.response_body
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
class CallbacksWithArrayConditions < ControllerWithCallbacks
|
2012-12-07 15:24:56 -05:00
|
|
|
before_action :list, only: [:index, :listy]
|
|
|
|
before_action :authenticate, except: [:index, :listy]
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def index
|
|
|
|
self.response_body = @list.join(", ")
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def sekrit_data
|
|
|
|
self.response_body = (@list + [@authenticated]).join(", ")
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
private
|
2016-08-06 13:55:02 -04:00
|
|
|
def list
|
|
|
|
@list = ["Hello", "World"]
|
|
|
|
end
|
|
|
|
|
|
|
|
def authenticate
|
|
|
|
@list = []
|
|
|
|
@authenticated = "true"
|
|
|
|
end
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-08-26 03:18:52 -04:00
|
|
|
class TestCallbacksWithArrayConditions < ActiveSupport::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = CallbacksWithArrayConditions.new
|
|
|
|
end
|
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "when :only is specified with an array, a before action is triggered on that action" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "Hello, World", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "when :only is specified with an array, a before action is not triggered on other actions" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:sekrit_data)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "true", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2012-12-07 15:24:56 -05:00
|
|
|
test "when :except is specified with an array, an after action is not triggered on that action" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not @controller.instance_variable_defined?("@authenticated")
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
end
|
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
class ChangedConditions < Callback2
|
2016-08-06 13:35:13 -04:00
|
|
|
before_action :first, only: :index
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
def not_index
|
2010-09-28 17:25:52 -04:00
|
|
|
@text ||= nil
|
2009-02-27 23:49:44 -05:00
|
|
|
self.response_body = @text.to_s
|
|
|
|
end
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-08-26 03:18:52 -04:00
|
|
|
class TestCallbacksWithChangedConditions < ActiveSupport::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = ChangedConditions.new
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
test "when a callback is modified in a child with :only, it works for the :only action" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "Hello world", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-02-27 23:49:44 -05:00
|
|
|
test "when a callback is modified in a child with :only, it does not work for other actions" do
|
2011-01-18 17:55:20 -05:00
|
|
|
@controller.process(:not_index)
|
2009-08-26 03:18:52 -04:00
|
|
|
assert_equal "", @controller.response_body
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-05-12 13:53:00 -04:00
|
|
|
class SetsResponseBody < ControllerWithCallbacks
|
2012-12-07 15:24:56 -05:00
|
|
|
before_action :set_body
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-05-12 13:53:00 -04:00
|
|
|
def index
|
|
|
|
self.response_body = "Fail"
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-05-12 13:53:00 -04:00
|
|
|
def set_body
|
|
|
|
self.response_body = "Success"
|
|
|
|
end
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2009-05-12 13:53:00 -04:00
|
|
|
class TestHalting < ActiveSupport::TestCase
|
|
|
|
test "when a callback sets the response body, the action should not be invoked" do
|
2009-08-26 03:18:52 -04:00
|
|
|
controller = SetsResponseBody.new
|
|
|
|
controller.process(:index)
|
|
|
|
assert_equal "Success", controller.response_body
|
2009-05-12 13:53:00 -04:00
|
|
|
end
|
|
|
|
end
|
2011-01-18 17:55:20 -05:00
|
|
|
|
2015-10-29 19:18:12 -04:00
|
|
|
class CallbacksWithArgs < ControllerWithCallbacks
|
|
|
|
set_callback :process_action, :before, :first
|
|
|
|
|
|
|
|
def first
|
|
|
|
@text = "Hello world"
|
|
|
|
end
|
|
|
|
|
|
|
|
def index(text)
|
|
|
|
self.response_body = @text + text
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class TestCallbacksWithArgs < ActiveSupport::TestCase
|
|
|
|
test "callbacks still work when invoking process with multiple arguments" do
|
|
|
|
controller = CallbacksWithArgs.new
|
|
|
|
controller.process(:index, " Howdy!")
|
|
|
|
assert_equal "Hello world Howdy!", controller.response_body
|
|
|
|
end
|
|
|
|
end
|
2021-10-13 16:02:39 -04:00
|
|
|
|
|
|
|
class TestCallbacksWithMissingConditions < ActiveSupport::TestCase
|
|
|
|
class CallbacksWithMissingOnly < ControllerWithCallbacks
|
|
|
|
before_action :callback, only: :showw
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def callback
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "callbacks raise exception when their 'only' condition is a missing action" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = CallbacksWithMissingOnly.new
|
|
|
|
assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class CallbacksWithMissingOnlyInArray < ControllerWithCallbacks
|
|
|
|
before_action :callback, only: [:index, :showw]
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def callback
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "callbacks raise exception when their 'only' array condition contains a missing action" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = CallbacksWithMissingOnlyInArray.new
|
|
|
|
assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class CallbacksWithMissingExcept < ControllerWithCallbacks
|
|
|
|
before_action :callback, except: :showw
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def callback
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "callbacks raise exception when their 'except' condition is a missing action" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = CallbacksWithMissingExcept.new
|
|
|
|
assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class CallbacksWithMissingExceptInArray < ControllerWithCallbacks
|
|
|
|
before_action :callback, except: [:index, :showw]
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def callback
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "callbacks raise exception when their 'except' array condition contains a missing action" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = CallbacksWithMissingExceptInArray.new
|
|
|
|
assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class MultipleCallbacksWithMissingOnly < ControllerWithCallbacks
|
|
|
|
before_action :callback1, :callback2, ->() { }, only: :showw
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def callback1
|
|
|
|
end
|
|
|
|
|
|
|
|
def callback2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "raised exception message includes the names of callback actions and missing conditional action" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = MultipleCallbacksWithMissingOnly.new
|
|
|
|
error = assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_includes error.message, ":callback1"
|
|
|
|
assert_includes error.message, ":callback2"
|
|
|
|
assert_includes error.message, "#<Proc:"
|
|
|
|
assert_includes error.message, "only"
|
|
|
|
assert_includes error.message, "showw"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class BlockCallbackWithMissingOnly < ControllerWithCallbacks
|
|
|
|
before_action only: :showw do
|
|
|
|
# Callback body
|
|
|
|
end
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "raised exception message includes a block callback" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = BlockCallbackWithMissingOnly.new
|
|
|
|
error = assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_includes error.message, "#<Proc:"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class CallbacksWithBothOnlyAndExcept < ControllerWithCallbacks
|
|
|
|
before_action :callback, only: [:index, :show], except: :showw
|
|
|
|
|
|
|
|
def index
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def callback
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "callbacks with both :only and :except options raise an exception with the correct message" do
|
|
|
|
with_raise_on_missing_callback_actions do
|
|
|
|
controller = CallbacksWithBothOnlyAndExcept.new
|
|
|
|
error = assert_raises(AbstractController::ActionNotFound) do
|
|
|
|
controller.process(:index)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_includes error.message, ":callback"
|
|
|
|
assert_includes error.message, "except"
|
|
|
|
assert_includes error.message, "showw"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def with_raise_on_missing_callback_actions
|
|
|
|
old_raise_on_missing_callback_actions = ControllerWithCallbacks.raise_on_missing_callback_actions
|
|
|
|
ControllerWithCallbacks.raise_on_missing_callback_actions = true
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
ControllerWithCallbacks.raise_on_missing_callback_actions = old_raise_on_missing_callback_actions
|
|
|
|
end
|
|
|
|
end
|
2009-02-27 23:49:44 -05:00
|
|
|
end
|
2009-09-13 17:30:27 -04:00
|
|
|
end
|