From 5486ea1a08a79ce028ed37661be60d4c2a50dedb Mon Sep 17 00:00:00 2001 From: 491034170 <142008960+491034170@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:47:29 +0800 Subject: [PATCH] test: isolate auth redirect imports Stub optional JWT and multipart import surfaces so auth redirect URI tests collect in lightweight Windows backend environments. Restore the real utils package path and fill required Redis auth helpers when earlier tests leave lightweight package stubs in sys.modules. --- backend/tests/unit/test_auth_redirect_uri.py | 38 +++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/backend/tests/unit/test_auth_redirect_uri.py b/backend/tests/unit/test_auth_redirect_uri.py index f5a2692d49..10f4f2986c 100644 --- a/backend/tests/unit/test_auth_redirect_uri.py +++ b/backend/tests/unit/test_auth_redirect_uri.py @@ -20,6 +20,7 @@ from __future__ import annotations +import importlib.util import os import sys import types @@ -41,6 +42,7 @@ # Pre-mock heavy deps before importing the module under test (Python 3.9 compat — # database.redis_db uses dict | None syntax that requires 3.10+). BACKEND_DIR = Path(__file__).resolve().parents[2] +_BACKEND_DIR = str(BACKEND_DIR) def _ensure_package(name, path): @@ -87,6 +89,31 @@ def _install_module(name): log_sanitizer_stub = _install_module("utils.log_sanitizer") log_sanitizer_stub.sanitize = MagicMock(side_effect=lambda value: value) +jwt_stub = _install_module("jwt") +jwt_algorithms_stub = _install_module("jwt.algorithms") +jwt_algorithms_stub.RSAAlgorithm = MagicMock() + +_redis_db_mod = sys.modules['database.redis_db'] +for name in ['set_auth_session', 'get_auth_session', 'set_auth_code', 'get_auth_code', 'delete_auth_code']: + if not hasattr(_redis_db_mod, name): + setattr(_redis_db_mod, name, MagicMock()) + +_firebase_admin_mod = types.ModuleType('firebase_admin') +_firebase_admin_mod.auth = sys.modules['firebase_admin.auth'] +sys.modules.setdefault('firebase_admin', _firebase_admin_mod) + + +def _install_python_multipart_stub(): + if 'python_multipart' in sys.modules: + return False + if importlib.util.find_spec('python_multipart') is not None: + return False + + mod = types.ModuleType('python_multipart') + mod.__version__ = '0.0.20' + sys.modules['python_multipart'] = mod + return True + try: import jinja2 # noqa: F401 @@ -100,7 +127,16 @@ def _install_module(name): if str(BACKEND_DIR) not in sys.path: sys.path.insert(0, str(BACKEND_DIR)) -from routers.auth import _validate_redirect_uri # noqa: E402 +_utils_pkg = sys.modules.get('utils') +if _utils_pkg is not None: + _utils_pkg.__path__ = [os.path.join(_BACKEND_DIR, 'utils')] + +_remove_python_multipart_stub = _install_python_multipart_stub() +try: + from routers.auth import _validate_redirect_uri # noqa: E402 +finally: + if _remove_python_multipart_stub: + sys.modules.pop('python_multipart', None) # --------------------------------------------------------------------------- # Acceptance — every shape an existing Omi client uses