diff options
Diffstat (limited to 'actionpack/test/dispatch/callbacks_test.rb')
-rw-r--r-- | actionpack/test/dispatch/callbacks_test.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/callbacks_test.rb b/actionpack/test/dispatch/callbacks_test.rb new file mode 100644 index 0000000000..fc80191c02 --- /dev/null +++ b/actionpack/test/dispatch/callbacks_test.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require "abstract_unit" + +class DispatcherTest < ActiveSupport::TestCase + class Foo + cattr_accessor :a, :b + end + + class DummyApp + def call(env) + [200, {}, "response"] + end + end + + def setup + Foo.a, Foo.b = 0, 0 + ActionDispatch::Callbacks.reset_callbacks(:call) + end + + def test_before_and_after_callbacks + ActionDispatch::Callbacks.before { |*args| Foo.a += 1; Foo.b += 1 } + ActionDispatch::Callbacks.after { |*args| Foo.a += 1; Foo.b += 1 } + + dispatch + assert_equal 2, Foo.a + assert_equal 2, Foo.b + + dispatch + assert_equal 4, Foo.a + assert_equal 4, Foo.b + + dispatch do + raise "error" + end rescue nil + assert_equal 6, Foo.a + assert_equal 6, Foo.b + end + + private + + def dispatch(&block) + ActionDispatch::Callbacks.new(block || DummyApp.new).call( + "rack.input" => StringIO.new("") + ) + end +end |