"""FakeOCRClient — returns a canned :class:`OCRResult` for hermetic tests. Used by every pipeline unit test to avoid booting Surya / CUDA. The ``raise_on_call`` hook lets error-path tests exercise ``IX_002_000``-style code paths without needing to forge network errors. """ from __future__ import annotations from ix.contracts import OCRResult, Page class FakeOCRClient: """Satisfies :class:`~ix.ocr.client.OCRClient` structurally. Parameters ---------- canned: The :class:`OCRResult` to return from every :meth:`ocr` call. raise_on_call: If set, :meth:`ocr` raises this exception instead of returning. """ def __init__( self, canned: OCRResult, *, raise_on_call: BaseException | None = None, ) -> None: self._canned = canned self._raise_on_call = raise_on_call async def ocr(self, pages: list[Page]) -> OCRResult: """Return the canned result or raise the configured error.""" if self._raise_on_call is not None: raise self._raise_on_call return self._canned __all__ = ["FakeOCRClient"]