"""Load src/slack-bot/app.py under a unique module name so it doesn't collide with the other Lambdas' app.py modules in sys.modules, plus common test doubles.""" import importlib.util import pathlib import sys from unittest.mock import MagicMock import pytest _ROOT = pathlib.Path(__file__).resolve().parents[2] def _load(name, relpath): spec = importlib.util.spec_from_file_location(name, _ROOT / relpath) mod = importlib.util.module_from_spec(spec) sys.modules[name] = mod spec.loader.exec_module(mod) return mod @pytest.fixture def slackbot_app(): return _load("slackbot_app", "src/slack-bot/app.py") @pytest.fixture def respond(): return MagicMock(name="respond") @pytest.fixture def client(): return MagicMock(name="client") @pytest.fixture def routing_spy(slackbot_app, monkeypatch): """Replace the 3CX routing call with a spy so tests can assert on it without touching the network.""" spy = MagicMock(name="_update_3cx_routing") monkeypatch.setattr(slackbot_app, "_update_3cx_routing", spy) return spy @pytest.fixture def text_of(): """Helper: pull the `text=` kwarg from a mock's most recent call.""" def _get(mock): return mock.call_args.kwargs.get("text", "") return _get