| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """状态变更历史:同类型追加不覆盖。"""
- from datetime import datetime
- from sqlalchemy import create_engine
- from sqlalchemy.orm import sessionmaker
- def _session():
- from app.models.models import BizCollectionProtocol, BizProtocolStatusChange, SysUser
- engine = create_engine("sqlite:///:memory:")
- BizCollectionProtocol.__table__.create(engine)
- BizProtocolStatusChange.__table__.create(engine)
- SysUser.__table__.create(engine)
- return sessionmaker(bind=engine, autoflush=False, autocommit=False)(), engine
- def test_same_type_status_change_appends_instead_of_overwrite():
- from app.crud.collection_protocol import (
- list_protocol_status_changes,
- update_collection_protocol,
- )
- from app.models.models import BizCollectionProtocol
- db, engine = _session()
- try:
- now = datetime(2026, 3, 1, 10, 0, 0)
- db.add(
- BizCollectionProtocol(
- id="p1",
- protocol_no="XY0001",
- protocol_status="sxz",
- tenant_no="zkxw",
- create_dept_id="",
- create_time=now,
- update_time=now,
- del_flag=0,
- )
- )
- db.commit()
- update_collection_protocol(
- db,
- "p1",
- tenant_no="zkxw",
- user_id="u1",
- protocol_status="ygq",
- expire_time=datetime(2026, 6, 1, 12, 0, 0),
- expire_desc="第一次过期",
- )
- update_collection_protocol(
- db,
- "p1",
- tenant_no="zkxw",
- user_id="u2",
- protocol_status="ygq",
- expire_time=datetime(2026, 9, 15, 18, 0, 0),
- expire_desc="第二次过期",
- )
- row = db.query(BizCollectionProtocol).filter(BizCollectionProtocol.id == "p1").one()
- assert row.expire_desc == "第二次过期"
- items = list_protocol_status_changes(db, collection_protocol_id="p1", tenant_no="zkxw")
- assert [item["changeDesc"] for item in items] == ["第一次过期", "第二次过期"]
- assert [item["changeType"] for item in items] == ["expire", "expire"]
- assert items[0]["fromStatus"] == "sxz"
- assert items[1]["fromStatus"] == "ygq"
- assert items[1]["toStatus"] == "ygq"
- finally:
- db.close()
- engine.dispose()
|