test_sample_info_progress.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. """样本信息管理:进度展示码与证/保险已办理判定。"""
  2. import unittest
  3. from datetime import datetime
  4. from types import SimpleNamespace
  5. from app.services.sample_info_progress import (
  6. collection_progress,
  7. insurance_handled,
  8. qc_progress,
  9. reception_progress,
  10. storage_cert_handled,
  11. storage_progress,
  12. sync_handle_status_fields,
  13. )
  14. class TestCollectionProgress(unittest.TestCase):
  15. def test_empty(self):
  16. self.assertEqual(collection_progress(""), ("uncollected", "未采集"))
  17. def test_collected_includes_mid_states(self):
  18. for st in ("ycj", "jcz", "yrk"):
  19. self.assertEqual(collection_progress(st)[0], "collected")
  20. self.assertEqual(collection_progress("ycj")[1], "已采集")
  21. def test_void(self):
  22. self.assertEqual(collection_progress("yzf"), ("voided", "已作废"))
  23. class TestReceptionProgress(unittest.TestCase):
  24. def test_missing_or_pending(self):
  25. self.assertEqual(reception_progress(None)[0], "none")
  26. self.assertEqual(reception_progress({"acceptConclusion": "dqr"})[0], "none")
  27. self.assertEqual(reception_progress({"acceptConclusion": ""})[0], "none")
  28. def test_accept_reject(self):
  29. self.assertEqual(reception_progress({"acceptConclusion": "js"}), ("js", "已接收"))
  30. self.assertEqual(reception_progress({"acceptConclusion": "bj"}), ("bj", "拒收"))
  31. class TestQcProgress(unittest.TestCase):
  32. def test_none(self):
  33. self.assertEqual(qc_progress(None)[0], "incomplete")
  34. def test_complete_pass_or_fail(self):
  35. self.assertEqual(qc_progress({"qcConclusion": "tg", "qcWorkOrderStatus": "ywc"})[0], "complete")
  36. self.assertEqual(qc_progress({"qcConclusion": "btg", "qcWorkOrderStatus": "ywc"})[0], "complete")
  37. def test_void(self):
  38. self.assertEqual(qc_progress({"qcWorkOrderStatus": "yzf"})[0], "voided")
  39. def test_in_progress(self):
  40. self.assertEqual(qc_progress({"qcWorkOrderStatus": "ypz", "qcConclusion": ""})[0], "incomplete")
  41. class TestStorageProgress(unittest.TestCase):
  42. def test_none_or_pending(self):
  43. self.assertEqual(storage_progress(None)[0], "none")
  44. self.assertEqual(storage_progress({"storageStatus": "drk"})[0], "none")
  45. def test_in_and_reject(self):
  46. self.assertEqual(storage_progress({"storageStatus": "yrk"})[0], "yrk")
  47. self.assertEqual(
  48. storage_progress({"storageStatus": "drk", "reviewConclusion": "btg"})[0],
  49. "rejected",
  50. )
  51. class TestHandleFlags(unittest.TestCase):
  52. def test_cert_handle_time_wins(self):
  53. row = SimpleNamespace(handle_time=datetime(2026, 10, 1, 8, 0), make_status="0", make_date="")
  54. self.assertTrue(storage_cert_handled(row))
  55. def test_cert_legacy_make_status(self):
  56. row = SimpleNamespace(handle_time=None, make_status="1", make_date="")
  57. self.assertTrue(storage_cert_handled(row))
  58. def test_cert_legacy_make_date(self):
  59. row = SimpleNamespace(handle_time=None, make_status="0", make_date="20260101")
  60. self.assertTrue(storage_cert_handled(row))
  61. def test_cert_empty(self):
  62. self.assertFalse(storage_cert_handled(None))
  63. row = SimpleNamespace(handle_time=None, make_status="0", make_date="")
  64. self.assertFalse(storage_cert_handled(row))
  65. def test_insurance_legacy_todo_or_date(self):
  66. self.assertTrue(
  67. insurance_handled(SimpleNamespace(handle_time=None, todo_status="1", handle_date=""))
  68. )
  69. self.assertTrue(
  70. insurance_handled(SimpleNamespace(handle_time=None, todo_status="0", handle_date="20260131"))
  71. )
  72. self.assertFalse(
  73. insurance_handled(SimpleNamespace(handle_time=None, todo_status="0", handle_date=""))
  74. )
  75. class TestSyncHandleStatus(unittest.TestCase):
  76. def test_set_and_clear(self):
  77. ht = datetime(2026, 10, 5, 15, 0, 0)
  78. st, ymd = sync_handle_status_fields(ht)
  79. self.assertEqual(st, "1")
  80. self.assertEqual(ymd, "20261005")
  81. st2, ymd2 = sync_handle_status_fields(None)
  82. self.assertEqual(st2, "0")
  83. self.assertEqual(ymd2, "")