| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- """VendorGuard 命令行入口测试。"""
- from __future__ import annotations
- import unittest
- from vendor_guard.cli import (
- _approval_outcome_message,
- _build_utf8_reexec_command,
- _read_approval_decision,
- _run_utf8_child,
- _should_reexec_utf8,
- )
- class CliTests(unittest.TestCase):
- def test_windows_without_utf8_mode_requires_reexec(self) -> None:
- self.assertTrue(_should_reexec_utf8("nt", 0))
- self.assertFalse(_should_reexec_utf8("nt", 1))
- self.assertFalse(_should_reexec_utf8("posix", 0))
- def test_reexec_command_enables_utf8_and_preserves_arguments(self) -> None:
- command = _build_utf8_reexec_command(["ACME"])
- self.assertEqual(command[1:5], ["-X", "utf8", "-m", "vendor_guard.cli"])
- self.assertEqual(command[5:], ["ACME"])
- def test_parent_utf8_wrapper_converts_ctrl_c_to_exit_130(self) -> None:
- def interrupted_runner(*_args, **_kwargs):
- raise KeyboardInterrupt
- exit_code = _run_utf8_child(
- ["ACME"],
- {"PYTHONUTF8": "1"},
- runner=interrupted_runner,
- )
- self.assertEqual(exit_code, 130)
- def test_rejected_approval_is_reported_as_completed(self) -> None:
- message = _approval_outcome_message(
- vendor_name="ACME",
- proposed_decision="conditional",
- approved=False,
- report_path="reports/ACME/onboarding-report.md",
- )
- self.assertIn("人工审批已完成", message)
- self.assertIn("未批准执行", message)
- self.assertIn("准入建议未提交", message)
- self.assertNotIn("如需提交", message)
- self.assertNotIn("等待", message)
- def test_approved_approval_is_reported_as_executed(self) -> None:
- message = _approval_outcome_message(
- vendor_name="ACME",
- proposed_decision="conditional",
- approved=True,
- report_path="reports/ACME/onboarding-report.md",
- )
- self.assertIn("人工审批已完成", message)
- self.assertIn("已批准执行", message)
- self.assertIn("提交工具已执行", message)
- def test_ctrl_c_cancels_approval_without_treating_it_as_reject(self) -> None:
- def interrupted_input(_prompt: str) -> str:
- raise KeyboardInterrupt
- self.assertEqual(
- _read_approval_decision(interrupted_input),
- "cancel",
- )
- def test_eof_cancels_approval_without_treating_it_as_reject(self) -> None:
- def closed_input(_prompt: str) -> str:
- raise EOFError
- self.assertEqual(
- _read_approval_decision(closed_input),
- "cancel",
- )
- if __name__ == "__main__":
- unittest.main()
|