5
5
class ClearEventReporterContextTest < ActiveSupport ::TestCase
6
6
def setup
7
7
@app = -> ( env ) { [ 200 , { } , [ "Hello" ] ] }
8
- @middleware = ActionDispatch ::ClearEventReporterContext . new ( @app )
9
8
@reporter = ActiveSupport . event_reporter
10
9
end
11
10
12
11
test "clears event reporter context in response finished callback" do
13
12
@reporter . set_context ( shop_id : 123 )
14
13
15
- env = { }
16
- @ middleware. call ( env )
14
+ env = Rack :: MockRequest . env_for ( "" , { "rack.response_finished" => [ ] } )
15
+ middleware ( @app ) . call ( env )
17
16
18
17
assert env [ "rack.response_finished" ]
19
18
assert_equal 1 , env [ "rack.response_finished" ] . length
@@ -23,17 +22,46 @@ def setup
23
22
assert_equal ( { } , @reporter . context )
24
23
end
25
24
26
- test "clears event reporter context when exception is raised " do
25
+ test "clears event reporter context via Rack::BodyProxy when rack.response_finished is not supported " do
27
26
@reporter . set_context ( shop_id : 123 )
28
27
28
+ env = Rack ::MockRequest . env_for ( "" , { } )
29
+ response = middleware ( @app ) . call ( env )
30
+
31
+ assert_equal ( { shop_id : 123 } , @reporter . context )
32
+
33
+ body = response [ 2 ]
34
+ body . close
35
+
36
+ assert_equal ( { } , @reporter . context )
37
+ end
38
+
39
+ test "clears event reporter context via rack.response_finished when exception is raised" do
40
+ @reporter . set_context ( shop_id : 123 )
41
+
42
+ env = Rack ::MockRequest . env_for ( "" , { "rack.response_finished" => [ ] } )
29
43
exception_app = -> ( env ) { raise StandardError , "Test exception" }
30
- exception_middleware = ActionDispatch ::ClearEventReporterContext . new ( exception_app )
44
+ assert_raises ( StandardError ) do
45
+ middleware ( exception_app ) . call ( env )
46
+ end
31
47
32
- env = { }
48
+ assert_equal ( { } , @reporter . context )
49
+ end
50
+
51
+ test "clears event reporter context when exception is raised and rack.response_finished is not supported" do
52
+ @reporter . set_context ( shop_id : 123 )
53
+
54
+ exception_app = -> ( env ) { raise StandardError , "Test exception" }
55
+ env = Rack ::MockRequest . env_for ( "" , { } ) # Add missing env variable
33
56
assert_raises ( StandardError ) do
34
- exception_middleware . call ( env )
57
+ middleware ( exception_app ) . call ( env )
35
58
end
36
59
37
60
assert_equal ( { } , @reporter . context )
38
61
end
62
+
63
+ private
64
+ def middleware ( inner_app )
65
+ Rack ::Lint . new ( ActionDispatch ::ClearEventReporterContext . new ( Rack ::Lint . new ( inner_app ) ) )
66
+ end
39
67
end
0 commit comments