diff --git a/backend/app/channels/slack.py b/backend/app/channels/slack.py index 32b42e5a8..c9ad6a6ec 100644 --- a/backend/app/channels/slack.py +++ b/backend/app/channels/slack.py @@ -30,7 +30,7 @@ class SlackChannel(Channel): self._socket_client = None self._web_client = None self._loop: asyncio.AbstractEventLoop | None = None - self._allowed_users: set[str] = set(config.get("allowed_users", [])) + self._allowed_users: set[str] = {str(user_id) for user_id in config.get("allowed_users", [])} async def start(self) -> None: if self._running: diff --git a/backend/tests/test_channels.py b/backend/tests/test_channels.py index 8e7546ded..aaa5997b9 100644 --- a/backend/tests/test_channels.py +++ b/backend/tests/test_channels.py @@ -7,7 +7,7 @@ import json import tempfile from pathlib import Path from types import SimpleNamespace -from unittest.mock import AsyncMock, MagicMock +from unittest.mock import AsyncMock, MagicMock, patch import pytest @@ -1988,6 +1988,47 @@ class TestSlackSendRetry: _run(go()) + +class TestSlackAllowedUsers: + def test_numeric_allowed_users_match_string_event_user_id(self): + from app.channels.slack import SlackChannel + + bus = MessageBus() + bus.publish_inbound = AsyncMock() + channel = SlackChannel( + bus=bus, + config={"allowed_users": [123456]}, + ) + channel._loop = MagicMock() + channel._loop.is_running.return_value = True + channel._add_reaction = MagicMock() + channel._send_running_reply = MagicMock() + + event = { + "user": "123456", + "text": "hello from slack", + "channel": "C123", + "ts": "1710000000.000100", + } + + def submit_coro(coro, loop): + coro.close() + return MagicMock() + + with patch( + "app.channels.slack.asyncio.run_coroutine_threadsafe", + side_effect=submit_coro, + ) as submit: + channel._handle_message_event(event) + + channel._add_reaction.assert_called_once_with("C123", "1710000000.000100", "eyes") + channel._send_running_reply.assert_called_once_with("C123", "1710000000.000100") + submit.assert_called_once() + inbound = bus.publish_inbound.call_args.args[0] + assert inbound.user_id == "123456" + assert inbound.chat_id == "C123" + assert inbound.text == "hello from slack" + def test_raises_after_all_retries_exhausted(self): from app.channels.slack import SlackChannel