Files
zkxw/backend/tests/test_sample_info_progress.py
T
zlwuandCursor db31990ebe feat: 细胞存储缴费催缴、统一样本信息与协议支付能力增强
汇总近期业务改动:催缴菜单与后端、样本信息快捷登记与进度、运费关联、客户档案扩展、协议优惠/期次与押金划转,并同步 SQL 迁移与管理端页面收敛。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 21:20:37 +08:00

108 lines
4.1 KiB
Python

"""样本信息管理:进度展示码与证/保险已办理判定。"""
import unittest
from datetime import datetime
from types import SimpleNamespace
from app.services.sample_info_progress import (
collection_progress,
insurance_handled,
qc_progress,
reception_progress,
storage_cert_handled,
storage_progress,
sync_handle_status_fields,
)
class TestCollectionProgress(unittest.TestCase):
def test_empty(self):
self.assertEqual(collection_progress(""), ("uncollected", "未采集"))
def test_collected_includes_mid_states(self):
for st in ("ycj", "jcz", "yrk"):
self.assertEqual(collection_progress(st)[0], "collected")
self.assertEqual(collection_progress("ycj")[1], "已采集")
def test_void(self):
self.assertEqual(collection_progress("yzf"), ("voided", "已作废"))
class TestReceptionProgress(unittest.TestCase):
def test_missing_or_pending(self):
self.assertEqual(reception_progress(None)[0], "none")
self.assertEqual(reception_progress({"acceptConclusion": "dqr"})[0], "none")
self.assertEqual(reception_progress({"acceptConclusion": ""})[0], "none")
def test_accept_reject(self):
self.assertEqual(reception_progress({"acceptConclusion": "js"}), ("js", "已接收"))
self.assertEqual(reception_progress({"acceptConclusion": "bj"}), ("bj", "拒收"))
class TestQcProgress(unittest.TestCase):
def test_none(self):
self.assertEqual(qc_progress(None)[0], "incomplete")
def test_complete_pass_or_fail(self):
self.assertEqual(qc_progress({"qcConclusion": "tg", "qcWorkOrderStatus": "ywc"})[0], "complete")
self.assertEqual(qc_progress({"qcConclusion": "btg", "qcWorkOrderStatus": "ywc"})[0], "complete")
def test_void(self):
self.assertEqual(qc_progress({"qcWorkOrderStatus": "yzf"})[0], "voided")
def test_in_progress(self):
self.assertEqual(qc_progress({"qcWorkOrderStatus": "ypz", "qcConclusion": ""})[0], "incomplete")
class TestStorageProgress(unittest.TestCase):
def test_none_or_pending(self):
self.assertEqual(storage_progress(None)[0], "none")
self.assertEqual(storage_progress({"storageStatus": "drk"})[0], "none")
def test_in_and_reject(self):
self.assertEqual(storage_progress({"storageStatus": "yrk"})[0], "yrk")
self.assertEqual(
storage_progress({"storageStatus": "drk", "reviewConclusion": "btg"})[0],
"rejected",
)
class TestHandleFlags(unittest.TestCase):
def test_cert_handle_time_wins(self):
row = SimpleNamespace(handle_time=datetime(2026, 10, 1, 8, 0), make_status="0", make_date="")
self.assertTrue(storage_cert_handled(row))
def test_cert_legacy_make_status(self):
row = SimpleNamespace(handle_time=None, make_status="1", make_date="")
self.assertTrue(storage_cert_handled(row))
def test_cert_legacy_make_date(self):
row = SimpleNamespace(handle_time=None, make_status="0", make_date="20260101")
self.assertTrue(storage_cert_handled(row))
def test_cert_empty(self):
self.assertFalse(storage_cert_handled(None))
row = SimpleNamespace(handle_time=None, make_status="0", make_date="")
self.assertFalse(storage_cert_handled(row))
def test_insurance_legacy_todo_or_date(self):
self.assertTrue(
insurance_handled(SimpleNamespace(handle_time=None, todo_status="1", handle_date=""))
)
self.assertTrue(
insurance_handled(SimpleNamespace(handle_time=None, todo_status="0", handle_date="20260131"))
)
self.assertFalse(
insurance_handled(SimpleNamespace(handle_time=None, todo_status="0", handle_date=""))
)
class TestSyncHandleStatus(unittest.TestCase):
def test_set_and_clear(self):
ht = datetime(2026, 10, 5, 15, 0, 0)
st, ymd = sync_handle_status_fields(ht)
self.assertEqual(st, "1")
self.assertEqual(ymd, "20261005")
st2, ymd2 = sync_handle_status_fields(None)
self.assertEqual(st2, "0")
self.assertEqual(ymd2, "")