Merged updates from trunk into stable branch
[feedcatcher.git] / vendor / rails / actionpack / test / controller / middleware_stack_test.rb
1 require 'abstract_unit'
2
3 class MiddlewareStackTest < ActiveSupport::TestCase
4 class FooMiddleware; end
5 class BarMiddleware; end
6 class BazMiddleware; end
7
8 def setup
9 @stack = ActionController::MiddlewareStack.new
10 @stack.use FooMiddleware
11 @stack.use BarMiddleware
12 end
13
14 test "use should push middleware as class onto the stack" do
15 assert_difference "@stack.size" do
16 @stack.use BazMiddleware
17 end
18 assert_equal BazMiddleware, @stack.last.klass
19 end
20
21 test "use should push middleware as a string onto the stack" do
22 assert_difference "@stack.size" do
23 @stack.use "MiddlewareStackTest::BazMiddleware"
24 end
25 assert_equal BazMiddleware, @stack.last.klass
26 end
27
28 test "use should push middleware as a symbol onto the stack" do
29 assert_difference "@stack.size" do
30 @stack.use :"MiddlewareStackTest::BazMiddleware"
31 end
32 assert_equal BazMiddleware, @stack.last.klass
33 end
34
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"
38 end
39 assert_equal BazMiddleware, @stack.last.klass
40 assert_equal([true, {:foo => "bar"}], @stack.last.args)
41 end
42
43 test "insert inserts middleware at the integer index" do
44 @stack.insert(1, BazMiddleware)
45 assert_equal BazMiddleware, @stack[1].klass
46 end
47
48 test "insert_after inserts middleware after the integer index" do
49 @stack.insert_after(1, BazMiddleware)
50 assert_equal BazMiddleware, @stack[2].klass
51 end
52
53 test "insert_before inserts middleware before another middleware class" do
54 @stack.insert_before(BarMiddleware, BazMiddleware)
55 assert_equal BazMiddleware, @stack[1].klass
56 end
57
58 test "insert_after inserts middleware after another middleware class" do
59 @stack.insert_after(BarMiddleware, BazMiddleware)
60 assert_equal BazMiddleware, @stack[2].klass
61 end
62
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
67 end
68
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 }
73 end
74 end
75 end
76
77 test "lazy evaluates middleware class" do
78 assert_difference "@stack.size" do
79 @stack.use lambda { BazMiddleware }
80 end
81 assert_equal BazMiddleware, @stack.last.klass
82 end
83
84 test "lazy evaluates middleware arguments" do
85 assert_difference "@stack.size" do
86 @stack.use BazMiddleware, lambda { :foo }
87 end
88 assert_equal [:foo], @stack.last.send(:build_args)
89 end
90 end