refactor: enforce architectural boundaries by updating OpenClaw service imports
This commit is contained in:
28
backend/tests/test_api_openclaw_integration_boundary.py
Normal file
28
backend/tests/test_api_openclaw_integration_boundary.py
Normal file
@@ -0,0 +1,28 @@
|
||||
# ruff: noqa: S101
|
||||
"""Architectural boundary tests for API/OpenClaw integration usage."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def test_api_does_not_import_openclaw_gateway_client_directly() -> None:
|
||||
"""API modules should use OpenClaw services, not integration client imports."""
|
||||
repo_root = Path(__file__).resolve().parents[2]
|
||||
api_root = repo_root / "backend" / "app" / "api"
|
||||
|
||||
violations: list[str] = []
|
||||
for path in api_root.rglob("*.py"):
|
||||
rel = path.relative_to(repo_root)
|
||||
for lineno, raw_line in enumerate(path.read_text(encoding="utf-8").splitlines(), start=1):
|
||||
line = raw_line.strip()
|
||||
if line.startswith("from app.integrations.openclaw_gateway import "):
|
||||
violations.append(f"{rel}:{lineno}")
|
||||
elif line.startswith("import app.integrations.openclaw_gateway"):
|
||||
violations.append(f"{rel}:{lineno}")
|
||||
|
||||
assert not violations, (
|
||||
"Import OpenClaw integration details via service modules (for example "
|
||||
"`app.services.openclaw.shared`) instead of directly from `app.api`. "
|
||||
f"Violations: {', '.join(violations)}"
|
||||
)
|
||||
32
backend/tests/test_openclaw_import_boundaries.py
Normal file
32
backend/tests/test_openclaw_import_boundaries.py
Normal file
@@ -0,0 +1,32 @@
|
||||
# ruff: noqa: S101
|
||||
"""Architectural boundary tests for OpenClaw service imports."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def test_no_openclaw_package_barrel_imports() -> None:
|
||||
"""Disallow `from app.services.openclaw import ...` in backend code."""
|
||||
repo_root = Path(__file__).resolve().parents[2]
|
||||
backend_root = repo_root / "backend"
|
||||
scan_roots = (backend_root / "app", backend_root / "tests")
|
||||
|
||||
violations: list[str] = []
|
||||
for root in scan_roots:
|
||||
for path in root.rglob("*.py"):
|
||||
if path.name == "__init__.py":
|
||||
continue
|
||||
rel = path.relative_to(repo_root)
|
||||
for lineno, raw_line in enumerate(
|
||||
path.read_text(encoding="utf-8").splitlines(), start=1
|
||||
):
|
||||
line = raw_line.strip()
|
||||
if line.startswith("from app.services.openclaw import "):
|
||||
violations.append(f"{rel}:{lineno}")
|
||||
|
||||
assert not violations, (
|
||||
"Use concrete OpenClaw modules (for example "
|
||||
"`from app.services.openclaw.agent_service import ...`) instead of package imports. "
|
||||
f"Violations: {', '.join(violations)}"
|
||||
)
|
||||
Reference in New Issue
Block a user