test_bx_advance_withdraw.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """备用金撤回:仅申请人且审批中可回草稿。"""
  2. from types import SimpleNamespace
  3. from unittest.mock import MagicMock, patch
  4. from app.services.bx.advance import AdvanceService
  5. def _user(uid="u1"):
  6. return SimpleNamespace(id=uid, name="张三", dept_id="d1")
  7. def _apply(**kwargs):
  8. base = {
  9. "id": "a1",
  10. "applicant_id": "u1",
  11. "status": "pending",
  12. "current_node": "一级审批",
  13. "update_by": None,
  14. }
  15. base.update(kwargs)
  16. return SimpleNamespace(**base)
  17. @patch.object(AdvanceService, "_tenant_no", return_value="T1")
  18. @patch.object(AdvanceService, "get_by_id")
  19. def test_withdraw_pending_by_applicant(mock_get, _tenant):
  20. apply_obj = _apply()
  21. mock_get.return_value = apply_obj
  22. db = MagicMock()
  23. out = AdvanceService.withdraw(db, "a1", _user("u1"))
  24. assert out is apply_obj
  25. assert apply_obj.status == "draft"
  26. assert apply_obj.current_node is None
  27. assert apply_obj.update_by == "u1"
  28. db.flush.assert_called_once()
  29. @patch.object(AdvanceService, "_tenant_no", return_value="T1")
  30. @patch.object(AdvanceService, "get_by_id")
  31. def test_withdraw_rejects_non_applicant(mock_get, _tenant):
  32. mock_get.return_value = _apply(applicant_id="u1")
  33. assert AdvanceService.withdraw(MagicMock(), "a1", _user("u2")) is None
  34. @patch.object(AdvanceService, "_tenant_no", return_value="T1")
  35. @patch.object(AdvanceService, "get_by_id")
  36. def test_withdraw_rejects_non_pending(mock_get, _tenant):
  37. mock_get.return_value = _apply(status="draft")
  38. assert AdvanceService.withdraw(MagicMock(), "a1", _user("u1")) is None
  39. @patch.object(AdvanceService, "_tenant_no", return_value="T1")
  40. @patch.object(AdvanceService, "get_by_id")
  41. def test_withdraw_missing_returns_none(mock_get, _tenant):
  42. mock_get.return_value = None
  43. assert AdvanceService.withdraw(MagicMock(), "a1", _user("u1")) is None