Files
zkxw/backend/tests/test_departed_user_display_name.py
T
zlwuandCursor 5e563a6669 fix: 子表保存改为就地同步,避免整批换 id 打断外键。
协议样本、生产产出和盘点明细按行更新并保留原 id;补齐存储证明质检预填、离职人员显示名,以及样本采集通知模板字段。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-28 10:51:53 +08:00

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"])