test_pl_menu_badge_recharge_approval.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """首页「ETC/油卡充值审批」角标:统计当前用户待审批单据数。"""
  2. from datetime import date
  3. from typing import Optional
  4. from sqlalchemy import create_engine
  5. from sqlalchemy.orm import sessionmaker
  6. from app.models.bx_models import BxWorkflowDef, BxWorkflowNode
  7. from app.models.pl_models import PlVehicleRechargeApply
  8. from app.services.pl_menu_badge_service import (
  9. MENU_CODE_RECHARGE_APPROVAL,
  10. build_menu_badge_counts,
  11. )
  12. def test_recharge_approval_badge_counts_current_approver_pending(monkeypatch):
  13. engine = create_engine("sqlite://")
  14. BxWorkflowDef.__table__.create(engine)
  15. BxWorkflowNode.__table__.create(engine)
  16. PlVehicleRechargeApply.__table__.create(engine)
  17. db = sessionmaker(bind=engine)()
  18. db.add(
  19. BxWorkflowDef(
  20. id="wf1",
  21. biz_type="vehicle_recharge",
  22. wf_name="充值审批",
  23. tenant_no="t1",
  24. create_dept_id="d1",
  25. )
  26. )
  27. db.add(
  28. BxWorkflowNode(
  29. id="node-me",
  30. wf_id="wf1",
  31. node_name="总经理",
  32. node_order=1,
  33. approver_id="u-me",
  34. action_type="approve",
  35. tenant_no="t1",
  36. create_dept_id="d1",
  37. )
  38. )
  39. db.add(
  40. BxWorkflowNode(
  41. id="node-other",
  42. wf_id="wf1",
  43. node_name="财务",
  44. node_order=2,
  45. approver_id="u-other",
  46. action_type="disburse",
  47. tenant_no="t1",
  48. create_dept_id="d1",
  49. )
  50. )
  51. def add_apply(row_id: str, *, status: str, current_node: Optional[str]) -> None:
  52. db.add(
  53. PlVehicleRechargeApply(
  54. id=row_id,
  55. apply_no=f"NO-{row_id}",
  56. license_plate="鄂A00001",
  57. recharge_type="fuel",
  58. apply_date=date(2026, 9, 1),
  59. applicant_id="u1",
  60. status=status,
  61. current_node=current_node,
  62. tenant_no="t1",
  63. create_dept_id="d1",
  64. )
  65. )
  66. add_apply("a1", status="in_approval", current_node="node-me")
  67. add_apply("a2", status="in_approval", current_node="node-me")
  68. add_apply("a3", status="in_approval", current_node="node-other")
  69. add_apply("a4", status="rejected", current_node="node-me")
  70. add_apply("a5", status="draft", current_node=None)
  71. db.commit()
  72. monkeypatch.setattr(
  73. "app.services.pl_menu_badge_service.apply_pl_scope",
  74. lambda query, *_args, **_kwargs: query,
  75. )
  76. counts = build_menu_badge_counts(
  77. db,
  78. tenant_no="t1",
  79. user=object(),
  80. user_id="u-me",
  81. menu_codes=[MENU_CODE_RECHARGE_APPROVAL],
  82. )
  83. assert counts[MENU_CODE_RECHARGE_APPROVAL] == 2