test_protocol_list_sample_reception_qc.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. """协议/捐赠列表 sampleItems 接收与质检摘要字段。"""
  2. import unittest
  3. from unittest.mock import MagicMock
  4. class TestSampleItemReceptionQcFields(unittest.TestCase):
  5. """纯函数:把接收/质检结论摘要合并进列表样本行字段。"""
  6. def test_empty_when_no_reception_or_qc(self):
  7. from app.services.protocol_sample_list_summary import (
  8. build_sample_item_reception_qc_fields,
  9. )
  10. out = build_sample_item_reception_qc_fields(None, None)
  11. self.assertEqual(out["receptionAcceptConclusion"], "")
  12. self.assertEqual(out["receptionAcceptConclusionLabel"], "")
  13. self.assertEqual(out["receptionRemark"], "")
  14. self.assertEqual(out["qcConclusion"], "")
  15. self.assertEqual(out["qcConclusionLabel"], "")
  16. def test_accept_with_remark_and_qc_conclusion(self):
  17. from app.services.protocol_sample_list_summary import (
  18. build_sample_item_reception_qc_fields,
  19. )
  20. out = build_sample_item_reception_qc_fields(
  21. {"acceptConclusion": "js", "remark": "外观正常"},
  22. {"qcConclusion": "tg", "qcConclusionLabel": "合格"},
  23. )
  24. self.assertEqual(out["receptionAcceptConclusion"], "js")
  25. self.assertEqual(out["receptionAcceptConclusionLabel"], "接收")
  26. self.assertEqual(out["receptionRemark"], "外观正常")
  27. self.assertEqual(out["qcConclusion"], "tg")
  28. self.assertEqual(out["qcConclusionLabel"], "合格")
  29. def test_reject_without_qc(self):
  30. from app.services.protocol_sample_list_summary import (
  31. build_sample_item_reception_qc_fields,
  32. )
  33. out = build_sample_item_reception_qc_fields(
  34. {"acceptConclusion": "bj", "remark": "破损"},
  35. None,
  36. )
  37. self.assertEqual(out["receptionAcceptConclusion"], "bj")
  38. self.assertEqual(out["receptionAcceptConclusionLabel"], "拒收")
  39. self.assertEqual(out["receptionRemark"], "破损")
  40. self.assertEqual(out["qcConclusion"], "")
  41. self.assertEqual(out["qcConclusionLabel"], "")
  42. class TestListReceptionSummaryMap(unittest.TestCase):
  43. def test_picks_later_reception_time(self):
  44. from datetime import datetime
  45. from app.services.protocol_sample_list_summary import (
  46. get_list_reception_summary_map_by_sample_codes,
  47. )
  48. early = MagicMock()
  49. early.sample_code = "SC-001"
  50. early.accept_conclusion = "bj"
  51. early.remark = "old"
  52. early.reception_time = datetime(2026, 1, 1, 8, 0, 0)
  53. late = MagicMock()
  54. late.sample_code = "SC-001"
  55. late.accept_conclusion = "js"
  56. late.remark = "new"
  57. late.reception_time = datetime(2026, 2, 1, 8, 0, 0)
  58. db = MagicMock()
  59. q = MagicMock()
  60. db.query.return_value = q
  61. q.filter.return_value = q
  62. q.all.return_value = [early, late]
  63. out = get_list_reception_summary_map_by_sample_codes(
  64. db, "t1", ["SC-001"], reception_source="cell_storage"
  65. )
  66. self.assertEqual(out["SC-001"]["acceptConclusion"], "js")
  67. self.assertEqual(out["SC-001"]["remark"], "new")
  68. def test_keyed_by_sample_code(self):
  69. from app.services.protocol_sample_list_summary import (
  70. get_list_reception_summary_map_by_sample_codes,
  71. )
  72. rec = MagicMock()
  73. rec.sample_code = "SC-001"
  74. rec.accept_conclusion = "js"
  75. rec.remark = "ok"
  76. rec.reception_time = None
  77. db = MagicMock()
  78. q = MagicMock()
  79. db.query.return_value = q
  80. q.filter.return_value = q
  81. q.all.return_value = [rec]
  82. out = get_list_reception_summary_map_by_sample_codes(
  83. db, "t1", ["SC-001"], reception_source="cell_storage"
  84. )
  85. self.assertEqual(out["SC-001"]["acceptConclusion"], "js")
  86. self.assertEqual(out["SC-001"]["remark"], "ok")
  87. class TestListQcConclusionMap(unittest.TestCase):
  88. def test_uses_stored_conclusion(self):
  89. from app.services.protocol_sample_list_summary import (
  90. get_list_qc_conclusion_map_by_sample_codes,
  91. )
  92. wo = MagicMock()
  93. wo.id = "wo1"
  94. wo.sample_code = "SC-001"
  95. wo.conclusion = "tg"
  96. wo.work_order_no = "ZJ202609010001"
  97. wo.work_order_status = "ywc"
  98. db = MagicMock()
  99. q = MagicMock()
  100. db.query.return_value = q
  101. q.filter.return_value = q
  102. q.all.return_value = [wo]
  103. out = get_list_qc_conclusion_map_by_sample_codes(
  104. db, "t1", ["SC-001"], reception_source="cell_storage"
  105. )
  106. self.assertEqual(out["SC-001"]["qcConclusion"], "tg")
  107. self.assertEqual(out["SC-001"]["qcConclusionLabel"], "合格")
  108. self.assertEqual(out["SC-001"]["qcWorkOrderNo"], "ZJ202609010001")
  109. self.assertEqual(out["SC-001"]["qcWorkOrderStatus"], "ywc")
  110. self.assertEqual(out["SC-001"]["qcWorkOrderStatusLabel"], "已完成")
  111. class TestListGateQcSummaryByReceptionIds(unittest.TestCase):
  112. def test_keyed_by_reception_id(self):
  113. from app.services.protocol_sample_list_summary import (
  114. get_list_gate_qc_summary_map_by_reception_ids,
  115. )
  116. wo = MagicMock()
  117. wo.id = "wo1"
  118. wo.reception_id = "rec1"
  119. wo.conclusion = "btg"
  120. wo.work_order_no = "ZJ202609010002"
  121. wo.work_order_status = "ypz"
  122. db = MagicMock()
  123. q = MagicMock()
  124. db.query.return_value = q
  125. q.filter.return_value = q
  126. q.all.return_value = [wo]
  127. out = get_list_gate_qc_summary_map_by_reception_ids(db, "t1", ["rec1"])
  128. self.assertEqual(out["rec1"]["qcWorkOrderNo"], "ZJ202609010002")
  129. self.assertEqual(out["rec1"]["qcWorkOrderStatus"], "ypz")
  130. self.assertEqual(out["rec1"]["qcWorkOrderStatusLabel"], "已配置")
  131. self.assertEqual(out["rec1"]["qcConclusion"], "btg")
  132. self.assertEqual(out["rec1"]["qcConclusionLabel"], "不合格")
  133. if __name__ == "__main__":
  134. unittest.main()