11import time
2+ from time import sleep
3+ from typing import Callable
24
35from slack_sdk .web import WebClient
46
@@ -187,23 +189,15 @@ def handle_bot_message():
187189 assert response .status == 404
188190 assert called ["value" ] is False
189191
190- def test_assistant_threads_with_custom_listener_middleware (self ):
192+ def test_assistant_with_custom_listener_middleware (self ):
191193 app = App (client = self .web_client )
192194 assistant = Assistant ()
193-
194- state = {"called" : False , "middleware_called" : False }
195-
196- def assert_target_called ():
197- count = 0
198- while state ["called" ] is False and count < 20 :
199- sleep (0.1 )
200- count += 1
201- assert state ["called" ] is True
202- state ["called" ] = False
195+ handler_called = {"value" : False }
196+ middleware_called = {"value" : False }
203197
204198 class TestMiddleware (Middleware ):
205199 def process (self , * , req : BoltRequestType , resp : BoltResponse , next : Callable [[], BoltResponse ]):
206- state [ "middleware_called " ] = True
200+ middleware_called [ "value " ] = True
207201 # Verify assistant utilities are available
208202 assert req .context .get ("set_status" ) is not None
209203 assert req .context .get ("set_title" ) is not None
@@ -213,139 +207,53 @@ def process(self, *, req: BoltRequestType, resp: BoltResponse, next: Callable[[]
213207 return next ()
214208
215209 @assistant .thread_started (middleware = [TestMiddleware ()])
216- def start_thread (say : Say , set_suggested_prompts : SetSuggestedPrompts , context : BoltContext ):
217- assert context .channel_id == "D111"
218- assert context .thread_ts == "1726133698.626339"
219- assert say .thread_ts == context .thread_ts
220- say ("Hi, how can I help you today?" )
221- set_suggested_prompts (prompts = [{"title" : "What does SLACK stand for?" , "message" : "What does SLACK stand for?" }])
222- state ["called" ] = True
210+ def start_thread ():
211+ handler_called ["value" ] = True
223212
224213 @assistant .user_message (middleware = [TestMiddleware ()])
225- def handle_user_message (say : Say , set_status : SetStatus , context : BoltContext ):
226- assert context .channel_id == "D111"
227- assert context .thread_ts == "1726133698.626339"
228- assert say .thread_ts == context .thread_ts
229- set_status ("is typing..." )
230- say ("Here you are!" )
231- state ["called" ] = True
214+ def handle_user_message ():
215+ handler_called ["value" ] = True
232216
233217 app .assistant (assistant )
234218
235219 request = BoltRequest (body = thread_started_event_body , mode = "socket_mode" )
236220 response = app .dispatch (request )
237221 assert response .status == 200
238- assert_target_called ()
239- assert state ["middleware_called" ] is True
240- state ["middleware_called" ] = False
241-
242- request = BoltRequest (body = user_message_event_body , mode = "socket_mode" )
243- response = app .dispatch (request )
244- assert response .status == 200
245- assert_target_called ()
246- assert state ["middleware_called" ] is True
222+ assert_target_called (handler_called )
223+ assert_target_called (middleware_called )
247224
248- def test_assistant_events_without_assistant_middleware (self ):
249- app = App (client = self .web_client )
250-
251- state = {"called" : False }
252-
253- def assert_target_called ():
254- count = 0
255- while state ["called" ] is False and count < 20 :
256- sleep (0.1 )
257- count += 1
258- assert state ["called" ] is True
259- state ["called" ] = False
260-
261- @app .event ("assistant_thread_started" )
262- def start_thread (say : Say , set_suggested_prompts : SetSuggestedPrompts , set_status : SetStatus , context : BoltContext ):
263- assert context .channel_id == "D111"
264- assert context .thread_ts == "1726133698.626339"
265- assert say .thread_ts == context .thread_ts
266- assert set_status is not None
267- assert set_suggested_prompts is not None
268- assert context .get ("set_title" ) is not None
269- assert context .get ("get_thread_context" ) is not None
270- assert context .get ("save_thread_context" ) is not None
271- say ("Hi, how can I help you today?" )
272- state ["called" ] = True
273-
274- @app .message ()
275- def handle_user_message (say : Say , set_status : SetStatus , context : BoltContext ):
276- assert context .channel_id == "D111"
277- assert context .thread_ts == "1726133698.626339"
278- assert say .thread_ts == context .thread_ts
279- try :
280- set_status ("is typing..." )
281- say ("Here you are!" )
282- state ["called" ] = True
283- except Exception as e :
284- say (f"Oops, something went wrong (error: { e } " )
285-
286- request = BoltRequest (body = thread_started_event_body , mode = "socket_mode" )
287- response = app .dispatch (request )
288- assert response .status == 200
289- assert_target_called ()
225+ handler_called = {"value" : False }
226+ middleware_called = {"value" : False }
290227
291228 request = BoltRequest (body = user_message_event_body , mode = "socket_mode" )
292229 response = app .dispatch (request )
293230 assert response .status == 200
294- assert_target_called ()
231+ assert_target_called (handler_called )
232+ assert_target_called (middleware_called )
295233
296- # Non-assistant events should not get kwargs injected
297- request = BoltRequest (body = channel_user_message_event_body , mode = "socket_mode" )
298- response = app .dispatch (request )
299- assert response .status == 200
300-
301- def test_assistant_events_kwargs_disabled (self ):
302- app = App (client = self .web_client , attaching_agent_kwargs_enabled = False )
303-
304- state = {"called" : False }
305-
306- def assert_target_called ():
307- count = 0
308- while state ["called" ] is False and count < 20 :
309- sleep (0.1 )
310- count += 1
311- assert state ["called" ] is True
312- state ["called" ] = False
313-
314- @app .event ("assistant_thread_started" )
315- def start_thread (context : BoltContext ):
316- assert context .get ("set_status" ) is None
317- assert context .get ("set_title" ) is None
318- assert context .get ("set_suggested_prompts" ) is None
319- assert context .get ("get_thread_context" ) is None
320- assert context .get ("save_thread_context" ) is None
321- state ["called" ] = True
322-
323- request = BoltRequest (body = thread_started_event_body , mode = "socket_mode" )
324- response = app .dispatch (request )
325- assert response .status == 200
326- assert_target_called ()
327-
328- def test_assistant_threads_custom_middleware_can_short_circuit (self ):
234+ def test_assistant_custom_middleware_can_short_circuit (self ):
329235 app = App (client = self .web_client )
330236 assistant = Assistant ()
331-
332- state = {"handler_called " : False }
237+ handler_called = { "value" : False }
238+ middleware_called = {"value " : False }
333239
334240 class BlockingMiddleware (Middleware ):
335241 def process (self , * , req : BoltRequestType , resp : BoltResponse , next : Callable [[], BoltResponse ]):
242+ middleware_called ["value" ] = True
336243 # Intentionally not calling next() to short-circuit
337244 return BoltResponse (status = 200 )
338245
339246 @assistant .thread_started (middleware = [BlockingMiddleware ()])
340247 def start_thread (say : Say , context : BoltContext ):
341- state [ "handler_called " ] = True
248+ handler_called [ "value " ] = True
342249
343250 app .assistant (assistant )
344251
345252 request = BoltRequest (body = thread_started_event_body , mode = "socket_mode" )
346253 response = app .dispatch (request )
347254 assert response .status == 200
348- assert state ["handler_called" ] is False
255+ assert_target_called (middleware_called )
256+ assert handler_called ["value" ] is False
349257
350258
351259def build_payload (event : dict ) -> dict :
0 commit comments