Files
odysseus/tests/test_history_routes_shim.py

44 lines
1.9 KiB
Python
Raw Normal View History

refactor(routes): move history domain into routes/history/ subpackage (#5090) Slice 2d of the route-domain reorganization (#4082/#4071, per specs/architecture-runtime-inventory.md §6.3). Moves history_routes.py into routes/history/, leaving a backward-compat sys.modules shim at the old path. Pure file reorganization, no behavior change. The shim uses sys.modules replacement (same pattern as the merged gallery #4903, research #4975, and memory #5007 slices) so that `import routes.history_routes`, `from routes.history_routes import X`, `importlib.import_module(...)`, and the `import ... as history_routes` + `monkeypatch.setattr(history_routes, ...)` pattern used by test_history_compact_tool_calls.py / test_fork_session_metadata.py all operate on the same module object the application uses. The canonical module does NOT depend on the shim — routes/history/ history_routes.py imports only from core/, src/, and routes.session_routes (a sibling route module whose old import path stays valid via its own shim when session is migrated later). Three source-introspection test sites repointed to the new canonical path: - test_history_db_fallback_hidden.py - test_history_order_by_timestamp_regression.py - test_model_helper_owner_scope.py Adds tests/test_history_routes_shim.py to pin the sys.modules shim contract (legacy and canonical paths resolve to the same module object; monkeypatch via legacy alias reaches the canonical module). Verified: compileall clean; full suite 4351 passed, 3 skipped.
2026-07-04 19:36:35 +08:00
"""Regression test for the history route shim (slice 2d, #4082/#4071).
The backward-compat shim at ``routes/history_routes.py`` uses ``sys.modules``
replacement so the legacy import path and the canonical ``routes.history.*``
path resolve to the *same* module object. This is required because
``test_history_compact_tool_calls.py`` and ``test_fork_session_metadata.py``
do ``import routes.history_routes as history_routes`` followed by
``monkeypatch.setattr(history_routes, "_verify_session_owner", ...)`` — for
those patches to take effect at runtime, the legacy module object and the
canonical one must be identical. This test pins that contract.
"""
import importlib
import routes.history_routes as _shim_history # noqa: F401
def test_legacy_and_canonical_history_module_are_same_object():
"""``import routes.history_routes`` must alias the canonical module."""
legacy = importlib.import_module("routes.history_routes")
canonical = importlib.import_module("routes.history.history_routes")
assert legacy is canonical, (
"routes.history_routes shim must resolve to the canonical "
"routes.history.history_routes module object"
)
def test_monkeypatch_via_legacy_alias_reaches_canonical(monkeypatch):
"""Patching through the legacy alias must reach the canonical module.
Several history tests do ``import routes.history_routes as history_routes``
followed by ``monkeypatch.setattr(history_routes, "_verify_session_owner",
...)``. For that to take effect at runtime, the legacy module object and the
canonical one must be identical.
"""
legacy = importlib.import_module("routes.history_routes")
canonical = importlib.import_module("routes.history.history_routes")
sentinel = object()
monkeypatch.setattr(legacy, "setup_history_routes", sentinel)
assert canonical.setup_history_routes is sentinel, (
"monkeypatch via legacy alias did not reach the canonical module"
)