import pytest from unittest.mock import patch, MagicMock @pytest.fixture(autouse=True) def _suppress_background_services(): """Prevent real scheduler/stream/tracker from starting during tests.""" with ( patch("services.data_fetcher.start_scheduler"), patch("services.data_fetcher.stop_scheduler"), patch("services.ais_stream.start_ais_stream"), patch("services.ais_stream.stop_ais_stream"), patch("services.carrier_tracker.start_carrier_tracker"), patch("services.carrier_tracker.stop_carrier_tracker"), ): yield @pytest.fixture() def client(_suppress_background_services): """HTTPX test client against the FastAPI app (no real network).""" from httpx import ASGITransport, AsyncClient from main import app import asyncio transport = ASGITransport(app=app) async def _make_client(): async with AsyncClient(transport=transport, base_url="http://test") as ac: return ac # Return a sync-usable wrapper class SyncClient: def __init__(self): self._loop = asyncio.new_event_loop() self._transport = ASGITransport(app=app) def get(self, url, **kw): return self._loop.run_until_complete(self._get(url, **kw)) async def _get(self, url, **kw): async with AsyncClient(transport=self._transport, base_url="http://test") as ac: return await ac.get(url, **kw) def put(self, url, **kw): return self._loop.run_until_complete(self._put(url, **kw)) async def _put(self, url, **kw): async with AsyncClient(transport=self._transport, base_url="http://test") as ac: return await ac.put(url, **kw) return SyncClient()