协议样本、生产产出和盘点明细按行更新并保留原 id;补齐存储证明质检预填、离职人员显示名,以及样本采集通知模板字段。 Co-authored-by: Cursor <cursoragent@cursor.com>
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
"""离职(软删除)后,历史单据仍应展示人员姓名,而不是人员 id。"""
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
from app.crud.production_task import _enrich_assignee_names
|
|
from app.crud.production_task_step_assignee import enrich_step_completed_by_names
|
|
from app.crud.qc_inspection_batch import _assignee_names
|
|
from app.models.base import Base
|
|
from app.models.models import SysUser
|
|
|
|
|
|
def _user(user_id: str, nick_name: str, *, deleted: bool = False) -> SysUser:
|
|
now = datetime(2026, 7, 1, 10, 0, 0)
|
|
return SysUser(
|
|
id=user_id,
|
|
user_no="u-" + user_id[:6],
|
|
nick_name=nick_name,
|
|
email="",
|
|
phone_no="",
|
|
password="",
|
|
status="0" if deleted else "1",
|
|
tenant_no="zkxw",
|
|
create_dept_id="",
|
|
create_time=now,
|
|
update_time=now,
|
|
del_flag=1 if deleted else 0,
|
|
)
|
|
|
|
|
|
class TestDepartedUserDisplayName(unittest.TestCase):
|
|
def setUp(self):
|
|
self.engine = create_engine("sqlite:///:memory:")
|
|
Base.metadata.create_all(self.engine, tables=[SysUser.__table__])
|
|
Session = sessionmaker(bind=self.engine, autoflush=False, autocommit=False)
|
|
self.db = Session()
|
|
self.db.add_all(
|
|
[
|
|
_user("GONEID0001", "张倩文", deleted=True),
|
|
_user("STAYID0001", "侯以婷"),
|
|
]
|
|
)
|
|
self.db.commit()
|
|
|
|
def tearDown(self):
|
|
self.db.close()
|
|
|
|
def test_qc_batch_assignee_names_keep_departed_nick(self):
|
|
text = _assignee_names(self.db, ["GONEID0001", "STAYID0001"])
|
|
self.assertEqual(text, "张倩文、侯以婷")
|
|
|
|
def test_qc_batch_assignee_unknown_id_stays_id(self):
|
|
self.assertEqual(_assignee_names(self.db, ["NO_SUCH_USER"]), "NO_SUCH_USER")
|
|
|
|
def test_production_current_assignee_keeps_departed_nick(self):
|
|
items = [{"currentAssigneeUserId": "GONEID0001"}]
|
|
_enrich_assignee_names(self.db, items)
|
|
self.assertEqual(items[0]["currentAssigneeUserName"], "张倩文")
|
|
|
|
def test_step_completed_by_keeps_departed_nick(self):
|
|
steps = [{"completedBy": "GONEID0001"}]
|
|
enrich_step_completed_by_names(self.db, steps)
|
|
self.assertIn("张倩文", steps[0]["completedByName"])
|
|
self.assertNotIn("GONEID0001", steps[0]["completedByName"])
|