diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2009-04-22 15:26:03 +0100 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2009-04-22 15:26:03 +0100 |
commit | 5f3f100ce2d689480da85abc88e5e940cf90189e (patch) | |
tree | 15c1a05a5308a9eea56d7f0889ac46d9cac5b57c /actionpack/test/abstract_controller/callbacks_test.rb | |
parent | d758d996d1b66e2a65640f79f01ce2ac674d7ed5 (diff) | |
parent | ca49299434bc764b667cd86846d892e91a150ef3 (diff) | |
download | rails-5f3f100ce2d689480da85abc88e5e940cf90189e.tar.gz rails-5f3f100ce2d689480da85abc88e5e940cf90189e.tar.bz2 rails-5f3f100ce2d689480da85abc88e5e940cf90189e.zip |
Merge branch 'master' into active_model
Conflicts:
activeresource/lib/active_resource/validations.rb
Diffstat (limited to 'actionpack/test/abstract_controller/callbacks_test.rb')
-rw-r--r-- | actionpack/test/abstract_controller/callbacks_test.rb | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/actionpack/test/abstract_controller/callbacks_test.rb b/actionpack/test/abstract_controller/callbacks_test.rb new file mode 100644 index 0000000000..5fce30f478 --- /dev/null +++ b/actionpack/test/abstract_controller/callbacks_test.rb @@ -0,0 +1,197 @@ +require File.join(File.expand_path(File.dirname(__FILE__)), "test_helper") + +module AbstractController + module Testing + + class ControllerWithCallbacks < AbstractController::Base + use 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
\ No newline at end of file |