|
9 | 9 | import base64 |
10 | 10 | import importlib |
11 | 11 | import io |
12 | | -from unittest.mock import MagicMock |
| 12 | +from unittest.mock import MagicMock, patch |
13 | 13 |
|
14 | 14 | import pandas as pd |
15 | 15 | import pytest |
@@ -278,37 +278,25 @@ class TestGraphicElementsActor: |
278 | 278 |
|
279 | 279 | def test_actor_error_returns_dataframe_with_error(self) -> None: |
280 | 280 | """Actor should never raise; errors go into metadata columns.""" |
281 | | - import sys |
282 | | - |
283 | | - # Other test files (e.g. test_multimodal_embed) stub chart_detection in sys.modules. |
284 | | - # Ensure we get the real class so __new__ works. |
285 | | - mod_name = "nemo_retriever.chart.chart_detection" |
286 | | - stubbed = sys.modules.get(mod_name) |
287 | | - if stubbed is not None and type(stubbed).__name__ == "MagicMock": |
288 | | - del sys.modules[mod_name] |
289 | | - try: |
290 | | - from nemo_retriever.chart.chart_detection import GraphicElementsActor |
291 | | - finally: |
292 | | - if stubbed is not None: |
293 | | - sys.modules[mod_name] = stubbed |
294 | | - |
295 | | - # Build instance via __new__ only (__init__ is not called), then set attrs. |
296 | | - actor = GraphicElementsActor.__new__(GraphicElementsActor) |
297 | | - actor._graphic_elements_model = None |
298 | | - actor._ocr_model = None |
299 | | - actor._graphic_elements_invoke_url = "" |
300 | | - actor._ocr_invoke_url = "" |
301 | | - actor._api_key = None |
302 | | - actor._request_timeout_s = 120.0 |
303 | | - actor._remote_retry = None |
304 | | - |
305 | | - df = _make_chart_page_df() |
306 | | - # This will fail because both models are None and no URLs set. |
307 | | - result = actor(df) |
308 | | - assert "chart" in result.columns |
309 | | - assert "graphic_elements_ocr_v1" in result.columns |
310 | | - meta = result.iloc[0]["graphic_elements_ocr_v1"] |
311 | | - assert meta["error"] is not None |
| 281 | + from nemo_retriever.chart.chart_detection import GraphicElementsActor |
| 282 | + |
| 283 | + with patch("nemo_retriever.chart.chart_detection.GraphicElementsActor.__init__", return_value=None): |
| 284 | + actor = GraphicElementsActor.__new__(GraphicElementsActor) |
| 285 | + actor._graphic_elements_model = None |
| 286 | + actor._ocr_model = None |
| 287 | + actor._graphic_elements_invoke_url = "" |
| 288 | + actor._ocr_invoke_url = "" |
| 289 | + actor._api_key = None |
| 290 | + actor._request_timeout_s = 120.0 |
| 291 | + actor._remote_retry = None |
| 292 | + |
| 293 | + df = _make_chart_page_df() |
| 294 | + # This will fail because both models are None and no URLs set. |
| 295 | + result = actor(df) |
| 296 | + assert "chart" in result.columns |
| 297 | + assert "graphic_elements_ocr_v1" in result.columns |
| 298 | + meta = result.iloc[0]["graphic_elements_ocr_v1"] |
| 299 | + assert meta["error"] is not None |
312 | 300 |
|
313 | 301 |
|
314 | 302 | # --------------------------------------------------------------------------- |
|
0 commit comments