@@ -111,34 +111,49 @@ async def test_raises_when_not_listener_are_registered_for_an_event_id(async_lis
111
111
client .app .emit ("x" )
112
112
113
113
114
- async def test_event_listener_raises_exception (async_listener : EventListener , mock : MagicMock ) -> None :
114
+ async def test_event_listener_raises_exception (
115
+ async_listener : EventListener , sync_listener : EventListener , mock : MagicMock
116
+ ) -> None :
115
117
"""Test that an event listener that raises an exception does not prevent other listeners from being called.
116
118
117
119
https://github.com/litestar-org/litestar/issues/2809
120
+ https://github.com/litestar-org/litestar/issues/4044
118
121
"""
119
122
120
123
error_mock = MagicMock ()
121
124
122
- @listener ("error_event" )
123
- async def raising_listener (* args : Any , ** kwargs : Any ) -> None :
125
+ @listener ("async_error_event" )
126
+ async def async_raising_listener (* args : Any , ** kwargs : Any ) -> None :
127
+ error_mock ()
128
+ raise ValueError ("test" )
129
+
130
+ @listener ("sync_error_event" )
131
+ def sync_raising_listener (* args : Any , ** kwargs : Any ) -> None :
124
132
error_mock ()
125
133
raise ValueError ("test" )
126
134
127
- @get ("/error" )
135
+ @get ("/async- error" )
128
136
def route_handler_1 (request : Request [Any , Any , Any ]) -> None :
129
- request .app .emit ("error_event " )
137
+ request .app .emit ("async_error_event " )
130
138
131
- @get ("/no -error" )
139
+ @get ("/sync -error" )
132
140
def route_handler_2 (request : Request [Any , Any , Any ]) -> None :
141
+ request .app .emit ("sync_error_event" )
142
+
143
+ @get ("/no-error" )
144
+ def route_handler_3 (request : Request [Any , Any , Any ]) -> None :
133
145
request .app .emit ("test_event" )
134
146
135
147
with create_test_client (
136
- route_handlers = [route_handler_1 , route_handler_2 ], listeners = [async_listener , raising_listener ]
148
+ route_handlers = [route_handler_1 , route_handler_2 , route_handler_3 ],
149
+ listeners = [async_listener , sync_listener , async_raising_listener , sync_raising_listener ],
137
150
) as client :
138
- first_response = client .get ("/error" )
139
- second_response = client .get ("/no-error" )
151
+ first_response = client .get ("/async-error" )
152
+ second_response = client .get ("/sync-error" )
153
+ third_response = client .get ("/no-error" )
140
154
assert first_response .status_code == HTTP_200_OK
141
155
assert second_response .status_code == HTTP_200_OK
156
+ assert third_response .status_code == HTTP_200_OK
142
157
143
158
error_mock .assert_called ()
144
159
mock .assert_called ()
0 commit comments