87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
"""储存证质检信息:类型键与 payload 规范化。"""
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
|
|
from app.crud.sample_storage_cert_qc import _row_to_dict
|
|
from app.services.sample_storage_cert_qc import (
|
|
SAMPLE_TYPE_KEY_PERINATAL_HSC,
|
|
SAMPLE_TYPE_KEY_UC_MSC,
|
|
empty_detail,
|
|
normalize_payload,
|
|
resolve_sample_type_key,
|
|
supports_storage_cert_qc,
|
|
)
|
|
|
|
|
|
class TestResolveSampleTypeKey(unittest.TestCase):
|
|
def test_hsc(self):
|
|
self.assertEqual(resolve_sample_type_key("围产期造血干细胞"), SAMPLE_TYPE_KEY_PERINATAL_HSC)
|
|
|
|
def test_msc(self):
|
|
self.assertEqual(resolve_sample_type_key("脐带间充质干细胞"), SAMPLE_TYPE_KEY_UC_MSC)
|
|
|
|
def test_other(self):
|
|
self.assertIsNone(resolve_sample_type_key("胎盘亚全能干细胞"))
|
|
self.assertIsNone(resolve_sample_type_key(""))
|
|
|
|
def test_supports(self):
|
|
self.assertTrue(supports_storage_cert_qc("围产期造血干细胞"))
|
|
self.assertFalse(supports_storage_cert_qc("其他"))
|
|
|
|
|
|
class TestNormalizePayload(unittest.TestCase):
|
|
def test_rejects_non_object(self):
|
|
with self.assertRaises(ValueError):
|
|
normalize_payload([])
|
|
with self.assertRaises(ValueError):
|
|
normalize_payload("x")
|
|
|
|
def test_keeps_dict_stringifies_keys(self):
|
|
out = normalize_payload({"viability_pct": 90.4, 1: "bad"})
|
|
self.assertEqual(out["viability_pct"], 90.4)
|
|
self.assertNotIn(1, out)
|
|
|
|
|
|
class TestEmptyDetail(unittest.TestCase):
|
|
def test_shape(self):
|
|
d = empty_detail(
|
|
sample_code="B1",
|
|
protocol_code="P1",
|
|
mother_name="张三",
|
|
sample_type_name="围产期造血干细胞",
|
|
sample_type_key="perinatal_hsc",
|
|
)
|
|
self.assertFalse(d["filledFlag"])
|
|
self.assertEqual(d["payload"], {})
|
|
self.assertEqual(d["sampleCode"], "B1")
|
|
self.assertEqual(d["labFlowCode"], "B1")
|
|
|
|
|
|
class TestRowToDict(unittest.TestCase):
|
|
def test_filled(self):
|
|
row = SimpleNamespace(
|
|
id="1",
|
|
sample_code="B1",
|
|
sample_type_key="perinatal_hsc",
|
|
collection_protocol_id="P",
|
|
qc_work_order_id="W",
|
|
filled_flag="1",
|
|
payload='{"viability_pct":"90"}',
|
|
create_time=None,
|
|
update_time=None,
|
|
)
|
|
d = _row_to_dict(
|
|
row,
|
|
protocol_code="C1",
|
|
mother_name="李",
|
|
sample_type_name="围产期造血干细胞",
|
|
)
|
|
self.assertTrue(d["filledFlag"])
|
|
self.assertEqual(d["payload"]["viability_pct"], "90")
|
|
self.assertEqual(d["labFlowCode"], "B1")
|
|
self.assertEqual(d["protocolCode"], "C1")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|