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)