test_cases.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import tempfile
  2. import unittest
  3. from pathlib import Path
  4. from defect_analysis.cases import (
  5. create_root_cause_case,
  6. get_audit_logs,
  7. list_cases,
  8. update_case_status,
  9. )
  10. from defect_analysis.database import init_database
  11. class CasesTest(unittest.TestCase):
  12. def setUp(self):
  13. self.tmpdir = tempfile.TemporaryDirectory()
  14. self.db_path = Path(self.tmpdir.name) / "cases.db"
  15. init_database(self.db_path)
  16. def tearDown(self):
  17. self.tmpdir.cleanup()
  18. def test_create_root_cause_case_records_audit_log(self):
  19. case_id = create_root_cause_case(
  20. self.db_path,
  21. title="LAM-A01 R2C3 气泡异常",
  22. candidate_type="equipment_seat",
  23. candidate_value="LAM-A01 / R2C3",
  24. defect_type="气泡",
  25. panel_zone="FPC/绑定区",
  26. owner="工程师A",
  27. created_by="tester",
  28. recommendation="检查贴合压力和吸嘴状态",
  29. )
  30. cases = list_cases(self.db_path)
  31. logs = get_audit_logs(self.db_path, entity_type="case", entity_id=case_id)
  32. self.assertEqual(1, len(cases))
  33. self.assertEqual("OPEN", cases.loc[0, "status"])
  34. self.assertEqual("工程师A", cases.loc[0, "owner"])
  35. self.assertEqual(1, len(logs))
  36. self.assertEqual("CREATE_CASE", logs.loc[0, "action"])
  37. def test_update_case_status_records_transition_and_audit_log(self):
  38. case_id = create_root_cause_case(
  39. self.db_path,
  40. title="治具划痕异常",
  41. candidate_type="lam_fixture_id",
  42. candidate_value="FIX-A01-03",
  43. defect_type="划痕",
  44. panel_zone="左边缘区",
  45. owner="工程师B",
  46. created_by="tester",
  47. recommendation="点检治具接触面",
  48. )
  49. update_case_status(
  50. self.db_path,
  51. case_id=case_id,
  52. status="IN_PROGRESS",
  53. actor="工程师B",
  54. note="已安排停机点检",
  55. )
  56. update_case_status(
  57. self.db_path,
  58. case_id=case_id,
  59. status="CLOSED",
  60. actor="工程师B",
  61. note="已更换治具,观察 3 天无复发",
  62. )
  63. cases = list_cases(self.db_path)
  64. logs = get_audit_logs(self.db_path, entity_type="case", entity_id=case_id)
  65. self.assertEqual("CLOSED", cases.loc[0, "status"])
  66. self.assertEqual(["CREATE_CASE", "UPDATE_STATUS", "UPDATE_STATUS"], logs["action"].tolist())
  67. self.assertIn("已更换治具", logs.iloc[-1]["details"])
  68. if __name__ == "__main__":
  69. unittest.main()