* refactor(routes): extract approval SSE state into api/route_approvals.py (#3575) Co-authored-by: Rod Boev <rod.boev@gmail.com> * docs(changelog): v0.51.275 — Release IQ (stage-p3d) --------- Co-authored-by: nesquena-hermes <[email protected]> Co-authored-by: Rod Boev <rod.boev@gmail.com>
84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
"""Import-resolution and identity tests for the route_approvals extraction.
|
|
|
|
Verifies that api.route_approvals is self-contained and that api.routes
|
|
re-exports the same live objects (not copies) so existing callers are
|
|
unaffected by the move.
|
|
"""
|
|
|
|
def test_route_approvals_imports():
|
|
from api.route_approvals import submit_pending, _approval_sse_subscribers
|
|
assert callable(submit_pending)
|
|
assert isinstance(_approval_sse_subscribers, dict)
|
|
|
|
|
|
def test_backward_compat_imports():
|
|
from api.routes import submit_pending
|
|
assert callable(submit_pending)
|
|
|
|
|
|
def test_identity():
|
|
from api.route_approvals import _approval_sse_subscribers as a
|
|
from api.routes import _approval_sse_subscribers as b
|
|
assert a is b, "routes.py must re-export the same object, not a copy"
|
|
|
|
|
|
def test_pending_identity():
|
|
"""_pending dict must be the same object in both modules."""
|
|
from api.route_approvals import _pending as a
|
|
from api.routes import _pending as b
|
|
assert a is b, "routes.py must re-export the same _pending object"
|
|
|
|
|
|
def test_lock_identity():
|
|
"""_lock must be the same object in both modules."""
|
|
from api.route_approvals import _lock as a
|
|
from api.routes import _lock as b
|
|
assert a is b, "routes.py must re-export the same _lock object"
|
|
|
|
|
|
def test_sse_helpers_importable_from_route_approvals():
|
|
"""All SSE helpers must be importable directly from route_approvals."""
|
|
from api.route_approvals import (
|
|
_approval_sse_subscribe,
|
|
_approval_sse_unsubscribe,
|
|
_approval_sse_notify_locked,
|
|
_approval_sse_notify,
|
|
)
|
|
assert callable(_approval_sse_subscribe)
|
|
assert callable(_approval_sse_unsubscribe)
|
|
assert callable(_approval_sse_notify_locked)
|
|
assert callable(_approval_sse_notify)
|
|
|
|
|
|
def test_sse_helpers_backward_compat():
|
|
"""SSE helpers must still be importable from routes for backward compat."""
|
|
from api.routes import (
|
|
_approval_sse_subscribe,
|
|
_approval_sse_unsubscribe,
|
|
_approval_sse_notify_locked,
|
|
_approval_sse_notify,
|
|
)
|
|
assert callable(_approval_sse_subscribe)
|
|
assert callable(_approval_sse_unsubscribe)
|
|
assert callable(_approval_sse_notify_locked)
|
|
assert callable(_approval_sse_notify)
|
|
|
|
|
|
def test_sse_helper_identity():
|
|
"""SSE helpers imported from routes must be the same callables from route_approvals."""
|
|
import api.route_approvals as ra
|
|
import api.routes as r
|
|
assert ra._approval_sse_subscribe is r._approval_sse_subscribe
|
|
assert ra._approval_sse_unsubscribe is r._approval_sse_unsubscribe
|
|
assert ra._approval_sse_notify_locked is r._approval_sse_notify_locked
|
|
assert ra._approval_sse_notify is r._approval_sse_notify
|
|
assert ra.submit_pending is r.submit_pending
|
|
|
|
|
|
def test_no_circular_import():
|
|
"""route_approvals must not import from api.routes (no circular dep)."""
|
|
import pathlib
|
|
src = (pathlib.Path(__file__).parent.parent / "api" / "route_approvals.py").read_text()
|
|
assert "from api.routes" not in src, "route_approvals.py must not import from api.routes"
|
|
assert "import api.routes" not in src, "route_approvals.py must not import api.routes"
|