mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-15 11:14:31 +08:00
- 新增无头运行时及连接、查询、导出、批处理、审计和 MCP 命令 - 复用活动数据根、密文存储与跨进程锁,落实写入安全和取消语义 - 增加六平台 CLI 归档、独立校验和、Docker、npm 与 WinGet 分发 - 隔离 GUI/CLI 更新资产并强化 macOS 签名与公证门禁 - 补充并发、审计、事务及发布契约回归测试 Refs #902
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Tests for the stable tag/npm CLI package version contract."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import json
|
|
import subprocess
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SCRIPT = ROOT / "tools" / "validate-npm-cli-package-version.py"
|
|
SPEC = importlib.util.spec_from_file_location("validate_npm_cli_package_version", SCRIPT)
|
|
assert SPEC and SPEC.loader
|
|
MODULE = importlib.util.module_from_spec(SPEC)
|
|
SPEC.loader.exec_module(MODULE)
|
|
|
|
|
|
class ValidateNpmCLIPackageVersionTests(unittest.TestCase):
|
|
def test_current_package_matches_the_first_stable_cli_tag(self) -> None:
|
|
package_json = ROOT / "npm" / "gonavi-cli" / "package.json"
|
|
self.assertEqual(MODULE.validate_package_version("v0.9.3", package_json), "0.9.3")
|
|
|
|
def test_rejects_version_drift(self) -> None:
|
|
with tempfile.TemporaryDirectory() as temporary:
|
|
package_json = Path(temporary) / "package.json"
|
|
package_json.write_text(
|
|
json.dumps({"name": MODULE.PACKAGE_NAME, "version": "0.9.2"}),
|
|
encoding="utf-8",
|
|
)
|
|
with self.assertRaisesRegex(ValueError, "does not match stable tag"):
|
|
MODULE.validate_package_version("v0.9.3", package_json)
|
|
|
|
def test_rejects_non_stable_tags(self) -> None:
|
|
with self.assertRaisesRegex(ValueError, "stable tag must match"):
|
|
MODULE.validate_package_version("dev-a1b2c3d", ROOT / "npm" / "gonavi-cli" / "package.json")
|
|
|
|
def test_cli_reports_failure_for_invalid_tag(self) -> None:
|
|
result = subprocess.run(
|
|
["python3", str(SCRIPT), "--tag", "v0.9.3-rc1"],
|
|
text=True,
|
|
capture_output=True,
|
|
check=False,
|
|
)
|
|
self.assertEqual(result.returncode, 2)
|
|
self.assertIn("stable tag must match", result.stderr)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|