Files
tick-stock-panel/backend/tests/test_version_source.py
T
2026-10-06 12:40:16 +08:00

38 lines
1.5 KiB
Python

"""版本号单一来源: app.__version__ 运行时从 frontend/package.json 加载。
dev 模式读仓库文件, PyInstaller 冻结后读 _MEIPASS/package.json (tsp.spec 收集),
两者必须返回同一版本 —— 保证安装包、页面徽标、更新检查的"当前版本"永不漂移。
"""
import json
import sys
from pathlib import Path
import app as app_pkg
from app import __version__
REPO_ROOT = Path(__file__).resolve().parents[2]
PKG_JSON = REPO_ROOT / "frontend" / "package.json"
def test_dev_version_matches_package_json():
"""dev 模式: __version__ 与 frontend/package.json 完全一致。"""
assert __version__ == json.loads(PKG_JSON.read_text(encoding="utf-8"))["version"]
def test_frozen_reads_mepass_package_json(monkeypatch, tmp_path):
"""frozen 模式: 从 _MEIPASS/package.json 读版本 (tsp.spec 收集的那份)。"""
(tmp_path / "package.json").write_text(
json.dumps({"version": "9.9.9"}), encoding="utf-8"
)
monkeypatch.setattr(sys, "frozen", True, raising=False)
monkeypatch.setattr(sys, "_MEIPASS", str(tmp_path), raising=False)
assert app_pkg._load_version() == "9.9.9"
def test_frozen_missing_file_falls_back(monkeypatch, tmp_path):
"""frozen 模式文件缺失/损坏: 回退硬编码值, 不抛异常 (版本读取不能阻塞启动)。"""
monkeypatch.setattr(sys, "frozen", True, raising=False)
monkeypatch.setattr(sys, "_MEIPASS", str(tmp_path), raising=False) # 空目录
assert app_pkg._load_version() == app_pkg._FALLBACK_VERSION