Files
MoviePilot/tests/test_startup_warnings.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

121 lines
3.7 KiB
Python

"""
验证启动警告的分类、输出与重复控制。
"""
import warnings
import pytest
import app
def test_app_registers_pg_bin_for_windows_free_threaded(tmp_path, monkeypatch):
"""
Windows free-threaded 启动时应注册 PostgreSQL DLL 目录。
"""
handle = object()
registered = []
monkeypatch.setattr(app, "is_windows", lambda: True)
monkeypatch.setattr(app, "is_free_threaded_runtime", lambda: True)
monkeypatch.setattr(
app.os,
"add_dll_directory",
lambda path: registered.append(path) or handle,
raising=False,
)
monkeypatch.setattr(app, "_windows_dll_directory_handles", [])
monkeypatch.setenv("PGBIN", str(tmp_path))
app._configure_free_threaded_windows_native_dependencies()
assert registered == [str(tmp_path)]
assert app._windows_dll_directory_handles == [handle]
def test_app_skips_pg_bin_for_standard_runtime(monkeypatch):
"""
标准 Windows 运行时不应执行 free-threaded 专属 DLL 注册。
"""
monkeypatch.setattr(app, "is_windows", lambda: True)
monkeypatch.setattr(app, "is_free_threaded_runtime", lambda: False)
monkeypatch.setattr(
app.os,
"add_dll_directory",
lambda _path: pytest.fail("must not register a DLL directory"),
raising=False,
)
monkeypatch.setenv("PGBIN", "C:/PostgreSQL/bin")
app._configure_free_threaded_windows_native_dependencies()
def test_app_skips_missing_pg_bin_for_windows_free_threaded(monkeypatch):
"""
无效外部目录不能污染 Windows DLL 搜索路径。
"""
monkeypatch.setattr(app, "is_windows", lambda: True)
monkeypatch.setattr(app, "is_free_threaded_runtime", lambda: True)
monkeypatch.setattr(
app.os,
"add_dll_directory",
lambda _path: pytest.fail("must not register a missing DLL directory"),
raising=False,
)
monkeypatch.setenv("PGBIN", "Z:/missing/postgresql/bin")
app._configure_free_threaded_windows_native_dependencies()
def test_app_installs_known_oss2_invalid_escape_warning_filter():
"""
app 初始化过滤器应覆盖 oss2 的无效转义警告。
"""
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always")
app._filter_third_party_startup_warnings()
warnings.warn_explicit(
f'"{chr(92)}&" is an invalid escape sequence.',
SyntaxWarning,
filename="oss2/api.py",
lineno=703,
module="oss2.api",
)
assert caught == []
def test_app_does_not_hide_other_invalid_escape_warnings():
"""
其他无效转义仍应暴露,避免过滤器遮蔽新问题。
"""
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always")
app._filter_third_party_startup_warnings()
warnings.warn_explicit(
f'"{chr(92)}q" is an invalid escape sequence.',
SyntaxWarning,
filename="app/example.py",
lineno=1,
module="app.example",
)
assert len(caught) == 1
def test_app_installs_google_genai_python314_warning_filter():
"""
app 初始化过滤器应覆盖 Google GenAI SDK 的 Python 3.14 弃用警告。
"""
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always")
app._filter_third_party_startup_warnings()
warnings.warn_explicit(
"'_UnionGenericAlias' is deprecated and slated for removal in Python 3.17",
DeprecationWarning,
filename="google/genai/types.py",
lineno=1,
module="google.genai.types",
)
assert caught == []