59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
import pytest
|
|
|
|
from sync_state_machine.datasource.task_result import TaskStatus
|
|
from sync_state_machine.domain.contract.api_handler import ContractApiHandler
|
|
from sync_state_machine.domain.contract.sync_node import ContractSyncNode
|
|
|
|
|
|
class _MockApiClient:
|
|
def __init__(self) -> None:
|
|
self.requests: list[dict[str, Any]] = []
|
|
|
|
async def request(self, method: str, endpoint: str, **kwargs: Any) -> dict[str, Any]:
|
|
self.requests.append({"method": method, "endpoint": endpoint, **kwargs})
|
|
return {"code": 200, "message": "OK", "data": {"biz_id": "contract-created-1"}}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_contract_create_passes_name_and_qt_code_to_api() -> None:
|
|
handler = ContractApiHandler()
|
|
handler.api_client = _MockApiClient()
|
|
handler.set_poll_mode("sync")
|
|
|
|
node = ContractSyncNode(
|
|
node_id="contract-node-1",
|
|
data={
|
|
"id": "contract-local-1",
|
|
"project_id": "project-1",
|
|
"name": "电缆采购合同",
|
|
"short_name": "电缆采购合同",
|
|
"code": "QT",
|
|
"contract_type": "product",
|
|
"currency": "CNY",
|
|
"manager_name": "张三",
|
|
"manager_phone": "13800000000",
|
|
"sign_company": "测试供应商",
|
|
"company_id": "company-1",
|
|
"sign_date": "2026-03-01",
|
|
"credit_code": "91350000123456789X",
|
|
"total_price": 1200.5,
|
|
"sub_name": None,
|
|
},
|
|
context={"project_id": "project-1"},
|
|
)
|
|
|
|
results = await handler.create_all([node])
|
|
|
|
assert len(results) == 1
|
|
assert results[0].status == TaskStatus.SUCCESS
|
|
assert results[0].data_id == "contract-created-1"
|
|
|
|
request = handler.api_client.requests[0]
|
|
assert request["endpoint"] == "/contract/create"
|
|
assert request["data"]["data"]["name"] == "电缆采购合同"
|
|
assert request["data"]["data"]["code"] == "QT"
|
|
assert request["data"]["data"]["project_id"] == "project-1" |