| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- """标题序号须避开唯一索引仍占用的号,包括已软删记录。"""
- 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
|