| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- """备用金撤回:仅申请人且审批中可回草稿。"""
- from types import SimpleNamespace
- from unittest.mock import MagicMock, patch
- from app.services.bx.advance import AdvanceService
- def _user(uid="u1"):
- return SimpleNamespace(id=uid, name="张三", dept_id="d1")
- def _apply(**kwargs):
- base = {
- "id": "a1",
- "applicant_id": "u1",
- "status": "pending",
- "current_node": "一级审批",
- "update_by": None,
- }
- base.update(kwargs)
- return SimpleNamespace(**base)
- @patch.object(AdvanceService, "_tenant_no", return_value="T1")
- @patch.object(AdvanceService, "get_by_id")
- def test_withdraw_pending_by_applicant(mock_get, _tenant):
- apply_obj = _apply()
- mock_get.return_value = apply_obj
- db = MagicMock()
- out = AdvanceService.withdraw(db, "a1", _user("u1"))
- assert out is apply_obj
- assert apply_obj.status == "draft"
- assert apply_obj.current_node is None
- assert apply_obj.update_by == "u1"
- db.flush.assert_called_once()
- @patch.object(AdvanceService, "_tenant_no", return_value="T1")
- @patch.object(AdvanceService, "get_by_id")
- def test_withdraw_rejects_non_applicant(mock_get, _tenant):
- mock_get.return_value = _apply(applicant_id="u1")
- assert AdvanceService.withdraw(MagicMock(), "a1", _user("u2")) is None
- @patch.object(AdvanceService, "_tenant_no", return_value="T1")
- @patch.object(AdvanceService, "get_by_id")
- def test_withdraw_rejects_non_pending(mock_get, _tenant):
- mock_get.return_value = _apply(status="draft")
- assert AdvanceService.withdraw(MagicMock(), "a1", _user("u1")) is None
- @patch.object(AdvanceService, "_tenant_no", return_value="T1")
- @patch.object(AdvanceService, "get_by_id")
- def test_withdraw_missing_returns_none(mock_get, _tenant):
- mock_get.return_value = None
- assert AdvanceService.withdraw(MagicMock(), "a1", _user("u1")) is None
|