test_sample_storage_cert_qc.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. """储存证质检信息:类型键与 payload 规范化。"""
  2. import unittest
  3. from types import SimpleNamespace
  4. from app.crud.sample_storage_cert_qc import _row_to_dict
  5. from app.services.sample_storage_cert_qc import (
  6. SAMPLE_TYPE_KEY_PERINATAL_HSC,
  7. SAMPLE_TYPE_KEY_UC_MSC,
  8. empty_detail,
  9. normalize_payload,
  10. resolve_sample_type_key,
  11. supports_storage_cert_qc,
  12. )
  13. class TestResolveSampleTypeKey(unittest.TestCase):
  14. def test_hsc(self):
  15. self.assertEqual(resolve_sample_type_key("围产期造血干细胞"), SAMPLE_TYPE_KEY_PERINATAL_HSC)
  16. def test_msc(self):
  17. self.assertEqual(resolve_sample_type_key("脐带间充质干细胞"), SAMPLE_TYPE_KEY_UC_MSC)
  18. def test_other(self):
  19. self.assertIsNone(resolve_sample_type_key("胎盘亚全能干细胞"))
  20. self.assertIsNone(resolve_sample_type_key(""))
  21. def test_supports(self):
  22. self.assertTrue(supports_storage_cert_qc("围产期造血干细胞"))
  23. self.assertFalse(supports_storage_cert_qc("其他"))
  24. class TestNormalizePayload(unittest.TestCase):
  25. def test_rejects_non_object(self):
  26. with self.assertRaises(ValueError):
  27. normalize_payload([])
  28. with self.assertRaises(ValueError):
  29. normalize_payload("x")
  30. def test_keeps_dict_stringifies_keys(self):
  31. out = normalize_payload({"viability_pct": 90.4, 1: "bad"})
  32. self.assertEqual(out["viability_pct"], 90.4)
  33. self.assertNotIn(1, out)
  34. class TestEmptyDetail(unittest.TestCase):
  35. def test_shape(self):
  36. d = empty_detail(
  37. sample_code="B1",
  38. protocol_code="P1",
  39. mother_name="张三",
  40. sample_type_name="围产期造血干细胞",
  41. sample_type_key="perinatal_hsc",
  42. )
  43. self.assertFalse(d["filledFlag"])
  44. self.assertEqual(d["payload"], {})
  45. self.assertEqual(d["sampleCode"], "B1")
  46. self.assertEqual(d["labFlowCode"], "B1")
  47. class TestRowToDict(unittest.TestCase):
  48. def test_filled(self):
  49. row = SimpleNamespace(
  50. id="1",
  51. sample_code="B1",
  52. sample_type_key="perinatal_hsc",
  53. collection_protocol_id="P",
  54. qc_work_order_id="W",
  55. filled_flag="1",
  56. payload='{"viability_pct":"90"}',
  57. create_time=None,
  58. update_time=None,
  59. )
  60. d = _row_to_dict(
  61. row,
  62. protocol_code="C1",
  63. mother_name="李",
  64. sample_type_name="围产期造血干细胞",
  65. )
  66. self.assertTrue(d["filledFlag"])
  67. self.assertEqual(d["payload"]["viability_pct"], "90")
  68. self.assertEqual(d["labFlowCode"], "B1")
  69. self.assertEqual(d["protocolCode"], "C1")
  70. if __name__ == "__main__":
  71. unittest.main()