Files
shanxia2.0/backend/tests/test_bx_reimburse_title_seq.py
T
2026-09-23 12:03:07 +08:00

57 lines
1.7 KiB
Python

"""标题序号须避开唯一索引仍占用的号,包括已软删记录。"""
from datetime import date, datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.models.bx_models import BxReimburseApply
from app.utils.bx_codegen import allocate_reimburse_title_seq, preview_reimburse_title_seq
TENANT = "shanxia2.0"
REIMBURSE_DATE = date(2026, 9, 20)
def _session():
engine = create_engine("sqlite://")
BxReimburseApply.__table__.create(engine)
return sessionmaker(bind=engine)()
def _apply(*, title_seq: int, del_flag: int, apply_code: str) -> BxReimburseApply:
now = datetime(2026, 9, 20, 19, 0, 0)
return BxReimburseApply(
id=apply_code,
apply_code=apply_code,
title=f"系统管理员报销单20260920{title_seq:03d}",
reimburse_date=REIMBURSE_DATE,
title_seq=title_seq,
applicant_id="u1",
applicant_name="系统管理员",
expense_id="67",
expense_name="职工福利费",
amount=1,
status="draft",
tenant_no=TENANT,
create_dept_id="dept",
create_time=now,
update_time=now,
del_flag=del_flag,
)
def test_allocate_title_seq_skips_soft_deleted_row():
db = _session()
db.add(_apply(title_seq=1, del_flag=1, apply_code="BX20260920001"))
db.commit()
assert allocate_reimburse_title_seq(db, TENANT, REIMBURSE_DATE) == 2
assert preview_reimburse_title_seq(db, TENANT, REIMBURSE_DATE) == 2
def test_allocate_title_seq_still_increments_live_row():
db = _session()
db.add(_apply(title_seq=1, del_flag=0, apply_code="BX20260920001"))
db.commit()
assert allocate_reimburse_title_seq(db, TENANT, REIMBURSE_DATE) == 2