Files
shanxia2.0/backend/tests/test_bx_advance_withdraw.py
T
2026-09-14 09:59:02 +08:00

57 lines
1.8 KiB
Python

"""备用金撤回:仅申请人且审批中可回草稿。"""
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