"""Shared fixtures for socket-service tests. The chat feature added a research-ownership guard to ``SocketIOService.__handle_subscribe`` so that an authenticated user cannot subscribe to another user's research_id. The check pulls ``username`` from ``flask.session`` and consults the user's encrypted DB via the new ``_user_owns_research`` helper. Pre-existing socket-service tests in this directory exercise the subscription bookkeeping (set membership, snapshot emit, etc.) and do NOT set up a Flask request context or a real DB. To keep their intent intact, this autouse fixture mocks the new authorization layer so every test in this directory exercises the subscribe-as-owner code path unless it opts out by overriding the fixtures. Tests that explicitly want to exercise the negative path (``_user_owns_research → False`` or ``session.get("username") → None``) should override the relevant mock with their own ``patch.object`` call inside the test body. """ from unittest.mock import patch import pytest @pytest.fixture(autouse=True) def _allow_socket_subscribe(monkeypatch): """Patch ``socket_service.session`` and ``_user_owns_research`` so tests that call ``__handle_subscribe`` don't crash on the new ownership check. Scope: function. The patches are torn down at test exit. """ # Lazy import — keep this conftest cheap for tests that never touch # the socket service at all. Some tests in this dir import via # ``local_deep_research...`` while others use ``src.local_deep_research...``; # Python may cache them as separate module identities, so resolve # whichever is importable and patch its session binding. try: from local_deep_research.web.services.socket_service import ( SocketIOService, ) module_path = "local_deep_research.web.services.socket_service" except ImportError: from src.local_deep_research.web.services.socket_service import ( SocketIOService, ) module_path = "src.local_deep_research.web.services.socket_service" with ( patch(f"{module_path}.session", {"username": "test-owner"}), patch.object(SocketIOService, "_user_owns_research", return_value=True), ): yield