1
require 'abstract_unit'
3
class MiddlewareStackTest < ActiveSupport::TestCase
4
class FooMiddleware; end
5
class BarMiddleware; end
6
class BazMiddleware; end
9
@stack = ActionController::MiddlewareStack.new
10
@stack.use FooMiddleware
11
@stack.use BarMiddleware
14
test "use should push middleware as class onto the stack" do
15
assert_difference "@stack.size" do
16
@stack.use BazMiddleware
18
assert_equal BazMiddleware, @stack.last.klass
21
test "use should push middleware as a string onto the stack" do
22
assert_difference "@stack.size" do
23
@stack.use "MiddlewareStackTest::BazMiddleware"
25
assert_equal BazMiddleware, @stack.last.klass
28
test "use should push middleware as a symbol onto the stack" do
29
assert_difference "@stack.size" do
30
@stack.use :"MiddlewareStackTest::BazMiddleware"
32
assert_equal BazMiddleware, @stack.last.klass
35
test "use should push middleware class with arguments onto the stack" do
36
assert_difference "@stack.size" do
37
@stack.use BazMiddleware, true, :foo => "bar"
39
assert_equal BazMiddleware, @stack.last.klass
40
assert_equal([true, {:foo => "bar"}], @stack.last.args)
43
test "insert inserts middleware at the integer index" do
44
@stack.insert(1, BazMiddleware)
45
assert_equal BazMiddleware, @stack[1].klass
48
test "insert_after inserts middleware after the integer index" do
49
@stack.insert_after(1, BazMiddleware)
50
assert_equal BazMiddleware, @stack[2].klass
53
test "insert_before inserts middleware before another middleware class" do
54
@stack.insert_before(BarMiddleware, BazMiddleware)
55
assert_equal BazMiddleware, @stack[1].klass
58
test "insert_after inserts middleware after another middleware class" do
59
@stack.insert_after(BarMiddleware, BazMiddleware)
60
assert_equal BazMiddleware, @stack[2].klass
63
test "swaps one middleware out for another" do
64
assert_equal FooMiddleware, @stack[0].klass
65
@stack.swap(FooMiddleware, BazMiddleware)
66
assert_equal BazMiddleware, @stack[0].klass
69
test "active returns all only enabled middleware" do
70
assert_no_difference "@stack.active.size" do
71
assert_difference "@stack.size" do
72
@stack.use BazMiddleware, :if => lambda { false }
77
test "lazy evaluates middleware class" do
78
assert_difference "@stack.size" do
79
@stack.use lambda { BazMiddleware }
81
assert_equal BazMiddleware, @stack.last.klass
84
test "lazy evaluates middleware arguments" do
85
assert_difference "@stack.size" do
86
@stack.use BazMiddleware, lambda { :foo }
88
assert_equal [:foo], @stack.last.send(:build_args)