| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- """安排运输时自动开始执行已审批合同。"""
- from types import SimpleNamespace
- from unittest.mock import MagicMock, patch
- from app.services.pl_contract_plan_qty import auto_start_execute_approved_contracts
- def test_auto_start_execute_promotes_approved_only():
- approved = SimpleNamespace(id="c1", status="approved", update_by=None, update_time=None)
- executing = SimpleNamespace(id="c2", status="executing", update_by=None, update_time=None)
- by_id = {"c1": approved, "c2": executing}
- db = MagicMock()
- def query(_model):
- q = MagicMock()
- q.filter.return_value = q
- def first():
- # Retrieve id from filter call history is hard; use sequential pops
- return None
- q.first.side_effect = first
- return q
- db.query.side_effect = query
- plan = SimpleNamespace(id="p1", contract_id=None)
- call_ids = []
- def fake_query(model):
- q = MagicMock()
- q.filter.return_value = q
- def first():
- # Peek last equality on id from filter args — use call order instead
- cid = call_ids.pop(0) if call_ids else None
- return by_id.get(cid)
- q.first.side_effect = first
- return q
- with patch(
- "app.services.pl_contract_plan_qty.contract_ids_linked_to_plan",
- return_value={"c1", "c2"},
- ):
- # Ensure deterministic order
- with patch(
- "app.services.pl_contract_plan_qty.contract_ids_linked_to_plan",
- return_value=["c1", "c2"],
- ):
- db.query.side_effect = fake_query
- call_ids.extend(["c1", "c2"])
- started = auto_start_execute_approved_contracts(
- db, tenant_no="shanxia2.0", plan=plan, user_id="u1"
- )
- assert started == ["c1"]
- assert approved.status == "executing"
- assert approved.update_by == "u1"
- assert executing.status == "executing"
|