Skip to content

Commit 27e6723

Browse files
Improve tests after merge from main
1 parent 4c9c247 commit 27e6723

File tree

3 files changed

+49
-174
lines changed

3 files changed

+49
-174
lines changed

tests/scenario_tests/test_events_assistant.py

Lines changed: 23 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import time
2+
from time import sleep
3+
from typing import Callable
24

35
from 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

351259
def build_payload(event: dict) -> dict:

tests/scenario_tests/test_events_assistant_without_middleware.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ def handle_message_event(
178178
save_thread_context: SaveThreadContext,
179179
context: BoltContext,
180180
):
181-
assert context.thread_ts is None
182-
assert say.thread_ts == context.thread_ts
181+
assert context.thread_ts == "1726133698.626339"
182+
assert say.thread_ts == None
183183
assert set_status is None
184184
assert set_title is None
185185
assert set_suggested_prompts is None
@@ -206,8 +206,8 @@ def handle_message_event(
206206
save_thread_context: SaveThreadContext,
207207
context: BoltContext,
208208
):
209-
assert context.thread_ts is None
210-
assert say.thread_ts == context.thread_ts
209+
assert context.thread_ts == "1726133698.626339"
210+
assert say.thread_ts == None
211211
assert set_status is None
212212
assert set_title is None
213213
assert set_suggested_prompts is None
@@ -234,8 +234,8 @@ def handle_message_event(
234234
save_thread_context: SaveThreadContext,
235235
context: BoltContext,
236236
):
237-
assert context.thread_ts is None
238-
assert say.thread_ts == context.thread_ts
237+
assert context.thread_ts == "1726133698.626339"
238+
assert say.thread_ts == None
239239
assert set_status is None
240240
assert set_title is None
241241
assert set_suggested_prompts is None
@@ -247,3 +247,22 @@ def handle_message_event(
247247
response = app.dispatch(request)
248248
assert response.status == 200
249249
assert_target_called(called)
250+
251+
def test_assistant_events_agent_kwargs_disabled(self):
252+
app = App(client=self.web_client, attaching_agent_kwargs_enabled=False)
253+
254+
called = {"value": False}
255+
256+
@app.event("assistant_thread_started")
257+
def start_thread(context: BoltContext):
258+
assert context.get("set_status") is None
259+
assert context.get("set_title") is None
260+
assert context.get("set_suggested_prompts") is None
261+
assert context.get("get_thread_context") is None
262+
assert context.get("save_thread_context") is None
263+
called["value"] = True
264+
265+
request = BoltRequest(body=thread_started_event_body, mode="socket_mode")
266+
response = app.dispatch(request)
267+
assert response.status == 200
268+
assert_target_called(called)

tests/scenario_tests_async/test_events_assistant.py

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import asyncio
22
import time
3+
from typing import Awaitable, Callable, Optional
34

45
import pytest
56
from slack_sdk.web.async_client import AsyncWebClient
@@ -212,59 +213,6 @@ async def handle_bot_message():
212213
assert response.status == 404
213214
assert called["value"] is False
214215

215-
@pytest.mark.asyncio
216-
async def test_assistant_events_without_assistant_middleware(self):
217-
app = AsyncApp(client=self.web_client)
218-
219-
state = {"called": False}
220-
221-
async def assert_target_called():
222-
count = 0
223-
while state["called"] is False and count < 20:
224-
await asyncio.sleep(0.1)
225-
count += 1
226-
assert state["called"] is True
227-
state["called"] = False
228-
229-
@app.event("assistant_thread_started")
230-
async def start_thread(
231-
say: AsyncSay,
232-
set_suggested_prompts: AsyncSetSuggestedPrompts,
233-
set_status: AsyncSetStatus,
234-
context: AsyncBoltContext,
235-
):
236-
assert context.channel_id == "D111"
237-
assert context.thread_ts == "1726133698.626339"
238-
assert say.thread_ts == context.thread_ts
239-
assert set_status is not None
240-
assert set_suggested_prompts is not None
241-
assert context.get("set_title") is not None
242-
assert context.get("get_thread_context") is not None
243-
assert context.get("save_thread_context") is not None
244-
await say("Hi, how can I help you today?")
245-
state["called"] = True
246-
247-
@app.message()
248-
async def handle_message(say: AsyncSay, context: AsyncBoltContext):
249-
if context.get("set_status") is not None:
250-
assert say.thread_ts == context.thread_ts
251-
state["called"] = True
252-
253-
request = AsyncBoltRequest(body=thread_started_event_body, mode="socket_mode")
254-
response = await app.async_dispatch(request)
255-
assert response.status == 200
256-
await assert_target_called()
257-
258-
request = AsyncBoltRequest(body=user_message_event_body, mode="socket_mode")
259-
response = await app.async_dispatch(request)
260-
assert response.status == 200
261-
await assert_target_called()
262-
263-
# Non-assistant events should not get kwargs injected
264-
request = AsyncBoltRequest(body=channel_user_message_event_body, mode="socket_mode")
265-
response = await app.async_dispatch(request)
266-
assert response.status == 200
267-
268216
@pytest.mark.asyncio
269217
async def test_assistant_events_kwargs_disabled(self):
270218
app = AsyncApp(client=self.web_client, attaching_agent_kwargs_enabled=False)

0 commit comments

Comments
 (0)