Files
MyGoNavi/tools/validate-npm-cli-package-version.test.py
Syngnat 4d5c0e6bb9 feat(cli): 新增独立命令行与发布链
- 新增无头运行时及连接、查询、导出、批处理、审计和 MCP 命令
- 复用活动数据根、密文存储与跨进程锁,落实写入安全和取消语义
- 增加六平台 CLI 归档、独立校验和、Docker、npm 与 WinGet 分发
- 隔离 GUI/CLI 更新资产并强化 macOS 签名与公证门禁
- 补充并发、审计、事务及发布契约回归测试

Refs #902
2026-08-11 10:34:58 +08:00

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()