test_report_lifecycle.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. """供应商报告运行隔离测试。"""
  2. from datetime import datetime, timezone
  3. from pathlib import Path
  4. from tempfile import TemporaryDirectory
  5. import unittest
  6. from vendor_guard.report_metadata import archive_existing_report
  7. class ReportLifecycleTests(unittest.TestCase):
  8. def setUp(self) -> None:
  9. self.temp_dir = TemporaryDirectory()
  10. self.addCleanup(self.temp_dir.cleanup)
  11. self.project_root = Path(self.temp_dir.name)
  12. self.report_path = (
  13. self.project_root / "reports" / "ACME" / "onboarding-report.md"
  14. )
  15. self.report_path.parent.mkdir(parents=True)
  16. def test_archives_existing_report_before_new_run(self) -> None:
  17. self.report_path.write_text(
  18. "# 旧报告\n\n## 人工审批记录\n\n拒绝执行提交\n",
  19. encoding="utf-8",
  20. )
  21. archived_path = archive_existing_report(
  22. self.project_root,
  23. self.report_path,
  24. datetime(2026, 7, 23, 18, 30, tzinfo=timezone.utc),
  25. )
  26. self.assertIsNotNone(archived_path)
  27. assert archived_path is not None
  28. self.assertFalse(self.report_path.exists())
  29. self.assertTrue(archived_path.is_file())
  30. self.assertEqual(
  31. archived_path.parent.resolve(),
  32. (self.project_root / "report-history" / "ACME").resolve(),
  33. )
  34. self.assertIn(
  35. "拒绝执行提交",
  36. archived_path.read_text(encoding="utf-8"),
  37. )
  38. def test_returns_none_when_no_previous_report_exists(self) -> None:
  39. archived_path = archive_existing_report(
  40. self.project_root,
  41. self.report_path,
  42. datetime(2026, 7, 23, 18, 30, tzinfo=timezone.utc),
  43. )
  44. self.assertIsNone(archived_path)
  45. if __name__ == "__main__":
  46. unittest.main()