Skip to content

Commit e7ceee0

Browse files
committed
Update test suites to improve coverage
1 parent f6135c3 commit e7ceee0

File tree

2 files changed

+154
-0
lines changed

2 files changed

+154
-0
lines changed

packages/slackBotFunction/tests/test_feedback.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,76 @@ def test_update_session_latest_message_error_handling(mock_table, mock_env):
107107

108108
# Should not raise exception
109109
update_session_latest_message("conv-key", "123")
110+
111+
112+
@patch("app.slack.slack_events.table")
113+
@patch("time.time")
114+
def test_store_feedback_with_qa_fallback_paths(mock_time, mock_table, mock_env):
115+
"""Test store_feedback_with_qa fallback paths"""
116+
mock_time.return_value = 1000
117+
from app.slack.slack_events import store_feedback_with_qa
118+
119+
with patch("app.slack.slack_events.get_latest_message_ts", return_value=None):
120+
store_feedback_with_qa("conv-key", "query", "response", "positive", "user-id", "channel-id")
121+
mock_table.put_item.assert_called()
122+
123+
124+
@patch("app.slack.slack_events.table")
125+
def test_cleanup_previous_unfeedback_qa(mock_table, mock_env):
126+
"""Test cleanup_previous_unfeedback_qa function"""
127+
from app.slack.slack_events import cleanup_previous_unfeedback_qa
128+
129+
# Test with no previous message
130+
session_data = {}
131+
cleanup_previous_unfeedback_qa("conv-key", "123", session_data)
132+
mock_table.delete_item.assert_not_called()
133+
134+
# Test with same message timestamp
135+
session_data = {"latest_message_ts": "123"}
136+
cleanup_previous_unfeedback_qa("conv-key", "123", session_data)
137+
mock_table.delete_item.assert_not_called()
138+
139+
# Test with different message timestamp and no feedback
140+
mock_table.reset_mock()
141+
session_data = {"latest_message_ts": "456"}
142+
with patch("app.slack.slack_events.check_feedback_exists", return_value=False):
143+
cleanup_previous_unfeedback_qa("conv-key", "123", session_data)
144+
mock_table.delete_item.assert_called_once_with(Key={"pk": "qa#conv-key#456", "sk": "turn"})
145+
146+
# Test with different message timestamp and existing feedback
147+
mock_table.reset_mock()
148+
with patch("app.slack.slack_events.check_feedback_exists", return_value=True):
149+
cleanup_previous_unfeedback_qa("conv-key", "123", session_data)
150+
mock_table.delete_item.assert_not_called()
151+
152+
153+
@patch("app.slack.slack_events.table")
154+
def test_check_feedback_exists(mock_table, mock_env):
155+
"""Test check_feedback_exists function"""
156+
from app.slack.slack_events import check_feedback_exists
157+
158+
# Test with existing feedback
159+
mock_table.query.return_value = {"Items": [{"feedback_type": "positive"}]}
160+
result = check_feedback_exists("conv-key", "123")
161+
assert result is True
162+
163+
# Test with no feedback
164+
mock_table.query.return_value = {"Items": []}
165+
result = check_feedback_exists("conv-key", "123")
166+
assert result is False
167+
168+
# Test with exception
169+
mock_table.query.side_effect = Exception("DB error")
170+
result = check_feedback_exists("conv-key", "123")
171+
assert result is False
172+
173+
174+
@patch("app.slack.slack_events.table")
175+
def test_cleanup_previous_unfeedback_qa_error_handling(mock_table, mock_env):
176+
"""Test cleanup_previous_unfeedback_qa error handling"""
177+
from app.slack.slack_events import cleanup_previous_unfeedback_qa
178+
179+
session_data = {"latest_message_ts": "456"}
180+
with patch("app.slack.slack_events.check_feedback_exists", side_effect=Exception("Error")):
181+
# Should not raise exception
182+
cleanup_previous_unfeedback_qa("conv-key", "123", session_data)

packages/slackBotFunction/tests/test_slack_handlers.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,3 +391,84 @@ def test_channel_message_handler_session_check_error(mock_env):
391391
mock_table.get_item.side_effect = Exception("DB error")
392392
# Should return early due to error
393393
channel_message_handler(mock_event, "evt123", mock_body, mock_client)
394+
395+
396+
def test_feedback_handler_unknown_action(mock_env):
397+
"""Test feedback_handler with unknown action"""
398+
from app.slack.slack_handlers import feedback_handler
399+
400+
mock_ack = Mock()
401+
mock_body = {"actions": [{"action_id": "unknown_action", "value": "{}"}]}
402+
mock_client = Mock()
403+
404+
feedback_handler(mock_ack, mock_body, mock_client)
405+
mock_ack.assert_called_once()
406+
407+
408+
def test_feedback_handler_not_latest_message(mock_env):
409+
"""Test feedback_handler when not latest message"""
410+
from app.slack.slack_handlers import feedback_handler
411+
412+
mock_ack = Mock()
413+
mock_body = {"actions": [{"action_id": "feedback_yes", "value": '{"ck": "conv-key", "mt": "123"}'}]}
414+
mock_client = Mock()
415+
416+
with patch("app.slack.slack_handlers._is_latest_message", return_value=False):
417+
feedback_handler(mock_ack, mock_body, mock_client)
418+
mock_ack.assert_called_once()
419+
420+
421+
def test_channel_message_handler_no_session(mock_env):
422+
"""Test channel_message_handler when no session found"""
423+
from app.slack.slack_handlers import channel_message_handler
424+
425+
mock_client = Mock()
426+
mock_event = {"text": "follow up", "channel": "C789", "thread_ts": "123", "user": "U456"}
427+
mock_body = {"event_id": "evt123"}
428+
429+
with patch("app.core.config.table") as mock_table:
430+
mock_table.get_item.return_value = {} # No session
431+
channel_message_handler(mock_event, "evt123", mock_body, mock_client)
432+
433+
434+
def test_channel_message_handler_feedback_path(mock_env):
435+
"""Test channel_message_handler feedback path"""
436+
from app.slack.slack_handlers import channel_message_handler
437+
438+
mock_client = Mock()
439+
mock_event = {"text": "feedback: channel feedback", "channel": "C789", "thread_ts": "123", "user": "U456"}
440+
mock_body = {"event_id": "evt123"}
441+
442+
with patch("app.core.config.table") as mock_table:
443+
mock_table.get_item.return_value = {"Item": {"session_id": "session123"}}
444+
# Just test that the function runs without error
445+
channel_message_handler(mock_event, "evt123", mock_body, mock_client)
446+
447+
448+
def test_dm_message_handler_normal_message(mock_env):
449+
"""Test dm_message_handler with normal message"""
450+
from app.slack.slack_handlers import dm_message_handler
451+
452+
mock_client = Mock()
453+
mock_event = {"text": "normal message", "user": "U456", "channel": "D789", "ts": "123", "channel_type": "im"}
454+
mock_body = {"event_id": "evt123"}
455+
456+
with patch("app.slack.slack_handlers._trigger_async_processing") as mock_trigger:
457+
dm_message_handler(mock_event, "evt123", mock_body, mock_client)
458+
mock_trigger.assert_called_once()
459+
460+
461+
def test_app_mention_handler_normal_mention(mock_env):
462+
"""Test app_mention_handler with normal mention"""
463+
from app.slack.slack_handlers import app_mention_handler
464+
465+
mock_ack = Mock()
466+
mock_client = Mock()
467+
mock_event = {"text": "<@U123> normal question", "user": "U456", "channel": "C789", "ts": "123"}
468+
mock_body = {"event_id": "evt123"}
469+
470+
with patch("app.slack.slack_handlers._is_duplicate_event", return_value=False), patch(
471+
"app.slack.slack_handlers._trigger_async_processing"
472+
) as mock_trigger:
473+
app_mention_handler(mock_event, mock_ack, mock_body, mock_client)
474+
mock_trigger.assert_called_once()

0 commit comments

Comments
 (0)