import importlib.util import pathlib import sys import types import pytest CURRENT_DIR = pathlib.Path(__file__).resolve().parent PROJECT_ROOT = CURRENT_DIR.parent.parent MODULE_PATH = PROJECT_ROOT / "core" / "construction_review" / "component" / "reviewers" / "timeliness_basis_reviewer.py" @pytest.fixture def basis_module(monkeypatch): logger_module = types.ModuleType("foundation.observability.logger.loggering") logger_module.review_logger = types.SimpleNamespace( info=lambda *args, **kwargs: None, warning=lambda *args, **kwargs: None, error=lambda *args, **kwargs: None, ) inter_tool_module = types.ModuleType("core.construction_review.component.reviewers.utils.inter_tool") inter_tool_module.InterTool = type("InterTool", (), {}) directory_module = types.ModuleType("core.construction_review.component.reviewers.utils.directory_extraction") directory_module.BasisItems = type("BasisItems", (), {}) directory_module.BasisItem = type("BasisItem", (), {}) reviewer_module = types.ModuleType("core.construction_review.component.reviewers.standard_timeliness_reviewer") reviewer_module.StandardTimelinessReviewer = type("StandardTimelinessReviewer", (), {}) reviewer_module.review_standard_timeliness_with_standardized_output = lambda *args, **kwargs: None monkeypatch.setitem(sys.modules, "foundation", types.ModuleType("foundation")) monkeypatch.setitem(sys.modules, "foundation.observability", types.ModuleType("foundation.observability")) monkeypatch.setitem(sys.modules, "foundation.observability.logger", types.ModuleType("foundation.observability.logger")) monkeypatch.setitem(sys.modules, "foundation.observability.logger.loggering", logger_module) monkeypatch.setitem(sys.modules, "core", types.ModuleType("core")) monkeypatch.setitem(sys.modules, "core.construction_review", types.ModuleType("core.construction_review")) monkeypatch.setitem(sys.modules, "core.construction_review.component", types.ModuleType("core.construction_review.component")) monkeypatch.setitem(sys.modules, "core.construction_review.component.reviewers", types.ModuleType("core.construction_review.component.reviewers")) monkeypatch.setitem(sys.modules, "core.construction_review.component.reviewers.utils", types.ModuleType("core.construction_review.component.reviewers.utils")) monkeypatch.setitem(sys.modules, "core.construction_review.component.reviewers.utils.inter_tool", inter_tool_module) monkeypatch.setitem(sys.modules, "core.construction_review.component.reviewers.utils.directory_extraction", directory_module) monkeypatch.setitem(sys.modules, "core.construction_review.component.reviewers.standard_timeliness_reviewer", reviewer_module) spec = importlib.util.spec_from_file_location("test_timeliness_basis_reviewer_module", MODULE_PATH) module = importlib.util.module_from_spec(spec) assert spec.loader is not None spec.loader.exec_module(module) return module @pytest.fixture def basis_service(basis_module): return basis_module.BasisReviewService() def test_debug_single_input(basis_service): text = "《okk》(主席令第29号)" result = basis_service._extract_standard_from_basis(text) assert result == { "standard_name": "okk", "standard_number": "主席令第29号", } print(result)