Callbacks test
This commit is contained in:
parent
9510070f78
commit
cde9aab823
|
@ -0,0 +1,217 @@
|
||||||
|
$:.unshift(File.dirname(__FILE__) + '/../../lib')
|
||||||
|
$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib')
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'active_support'
|
||||||
|
require 'active_support/test_case'
|
||||||
|
require 'action_controller'
|
||||||
|
require 'action_view/base'
|
||||||
|
|
||||||
|
begin
|
||||||
|
require 'ruby-debug'
|
||||||
|
Debugger.settings[:autoeval] = true
|
||||||
|
Debugger.start
|
||||||
|
rescue LoadError
|
||||||
|
# Debugging disabled. `gem install ruby-debug` to enable.
|
||||||
|
end
|
||||||
|
|
||||||
|
require 'action_controller/abstract/base'
|
||||||
|
require 'action_controller/abstract/renderer'
|
||||||
|
require 'action_controller/abstract/layouts'
|
||||||
|
require 'action_controller/abstract/callbacks'
|
||||||
|
|
||||||
|
module AbstractController
|
||||||
|
module Testing
|
||||||
|
|
||||||
|
class ControllerWithCallbacks < AbstractController::Base
|
||||||
|
include AbstractController::Callbacks
|
||||||
|
end
|
||||||
|
|
||||||
|
class Callback1 < ControllerWithCallbacks
|
||||||
|
process_action_callback :before, :first
|
||||||
|
|
||||||
|
def first
|
||||||
|
@text = "Hello world"
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
self.response_body = @text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestCallbacks < ActiveSupport::TestCase
|
||||||
|
test "basic callbacks work" do
|
||||||
|
result = Callback1.process(:index)
|
||||||
|
assert_equal "Hello world", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Callback2 < ControllerWithCallbacks
|
||||||
|
before_filter :first
|
||||||
|
after_filter :second
|
||||||
|
around_filter :aroundz
|
||||||
|
|
||||||
|
def first
|
||||||
|
@text = "Hello world"
|
||||||
|
end
|
||||||
|
|
||||||
|
def second
|
||||||
|
@second = "Goodbye"
|
||||||
|
end
|
||||||
|
|
||||||
|
def aroundz
|
||||||
|
@aroundz = "FIRST"
|
||||||
|
yield
|
||||||
|
@aroundz << "SECOND"
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
self.response_body = @text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestCallbacks < ActiveSupport::TestCase
|
||||||
|
test "before_filter works" do
|
||||||
|
result = Callback2.process(:index)
|
||||||
|
assert_equal "Hello world", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "after_filter works" do
|
||||||
|
result = Callback2.process(:index)
|
||||||
|
assert_equal "Goodbye", result.instance_variable_get("@second")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "around_filter works" do
|
||||||
|
result = Callback2.process(:index)
|
||||||
|
assert_equal "FIRSTSECOND", result.instance_variable_get("@aroundz")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Callback3 < ControllerWithCallbacks
|
||||||
|
before_filter do |c|
|
||||||
|
c.instance_variable_set("@text", "Hello world")
|
||||||
|
end
|
||||||
|
|
||||||
|
after_filter do |c|
|
||||||
|
c.instance_variable_set("@second", "Goodbye")
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
self.response_body = @text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestCallbacks < ActiveSupport::TestCase
|
||||||
|
test "before_filter works with procs" do
|
||||||
|
result = Callback3.process(:index)
|
||||||
|
assert_equal "Hello world", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "after_filter works with procs" do
|
||||||
|
result = Callback3.process(:index)
|
||||||
|
assert_equal "Goodbye", result.instance_variable_get("@second")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class CallbacksWithConditions < ControllerWithCallbacks
|
||||||
|
before_filter :list, :only => :index
|
||||||
|
before_filter :authenticate, :except => :index
|
||||||
|
|
||||||
|
def index
|
||||||
|
self.response_body = @list.join(", ")
|
||||||
|
end
|
||||||
|
|
||||||
|
def sekrit_data
|
||||||
|
self.response_body = (@list + [@authenticated]).join(", ")
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def list
|
||||||
|
@list = ["Hello", "World"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def authenticate
|
||||||
|
@list = []
|
||||||
|
@authenticated = "true"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestCallbacks < ActiveSupport::TestCase
|
||||||
|
test "when :only is specified, a before filter is triggered on that action" do
|
||||||
|
result = CallbacksWithConditions.process(:index)
|
||||||
|
assert_equal "Hello, World", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when :only is specified, a before filter is not triggered on other actions" do
|
||||||
|
result = CallbacksWithConditions.process(:sekrit_data)
|
||||||
|
assert_equal "true", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when :except is specified, an after filter is not triggered on that action" do
|
||||||
|
result = CallbacksWithConditions.process(:index)
|
||||||
|
assert_nil result.instance_variable_get("@authenticated")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class CallbacksWithArrayConditions < ControllerWithCallbacks
|
||||||
|
before_filter :list, :only => [:index, :listy]
|
||||||
|
before_filter :authenticate, :except => [:index, :listy]
|
||||||
|
|
||||||
|
def index
|
||||||
|
self.response_body = @list.join(", ")
|
||||||
|
end
|
||||||
|
|
||||||
|
def sekrit_data
|
||||||
|
self.response_body = (@list + [@authenticated]).join(", ")
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def list
|
||||||
|
@list = ["Hello", "World"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def authenticate
|
||||||
|
@list = []
|
||||||
|
@authenticated = "true"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestCallbacks < ActiveSupport::TestCase
|
||||||
|
test "when :only is specified with an array, a before filter is triggered on that action" do
|
||||||
|
result = CallbacksWithArrayConditions.process(:index)
|
||||||
|
assert_equal "Hello, World", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when :only is specified with an array, a before filter is not triggered on other actions" do
|
||||||
|
result = CallbacksWithArrayConditions.process(:sekrit_data)
|
||||||
|
assert_equal "true", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when :except is specified with an array, an after filter is not triggered on that action" do
|
||||||
|
result = CallbacksWithArrayConditions.process(:index)
|
||||||
|
assert_nil result.instance_variable_get("@authenticated")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class ChangedConditions < Callback2
|
||||||
|
before_filter :first, :only => :index
|
||||||
|
|
||||||
|
def not_index
|
||||||
|
self.response_body = @text.to_s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestCallbacks < ActiveSupport::TestCase
|
||||||
|
test "when a callback is modified in a child with :only, it works for the :only action" do
|
||||||
|
result = ChangedConditions.process(:index)
|
||||||
|
assert_equal "Hello world", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when a callback is modified in a child with :only, it does not work for other actions" do
|
||||||
|
result = ChangedConditions.process(:not_index)
|
||||||
|
assert_equal "", result.response_obj[:body]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue