Files
ecm_sync_system/tests/unit/test_construction_plan_update_fallback.py
T
strepsiades 4a9c444b10 first commit
2026-03-09 16:31:42 +08:00

91 lines
3.2 KiB
Python

from __future__ import annotations
import pytest
from sync_state_machine.domain.construction.api_handler import ConstructionTaskApiHandler
from sync_state_machine.domain.construction.sync_node import ConstructionTaskSyncNode
@pytest.mark.asyncio
async def test_construction_plan_update_uses_data_validation_and_reports_origin_status(monkeypatch: pytest.MonkeyPatch):
handler = ConstructionTaskApiHandler()
called = {"plan": 0, "base": 0}
async def _fake_update_base(client, data, push_id: str, biz_id: str):
called["base"] += 1
async def _fake_update_plan(client, data: dict, push_id: str, biz_id: str):
called["plan"] += 1
assert data.get("plan_start_date") == "2025-11-28"
assert data.get("plan_complete_date") == "2029-03-08"
assert data.get("contract_quantity") == 196645.0
monkeypatch.setattr(
"sync_state_machine.domain.construction.api_handler.api_update_construction_task",
_fake_update_base,
)
monkeypatch.setattr(
"sync_state_machine.domain.construction.api_handler.api_update_construction_task_plan",
_fake_update_plan,
)
handler.api_client = object()
node = ConstructionTaskSyncNode(
node_id="n1",
data_id="e9be27e9-e4aa-4eaf-8255-1fe451737227",
data={
"id": "e9be27e9-e4aa-4eaf-8255-1fe451737227",
"project_id": "f3e02e84-e81c-4aa6-88d4-f5aa108c8227",
"contract_id": "663dfc72-d63c-42da-8853-4abcddd405f6",
"show_name": "尾水隧洞开挖(方)",
"construction_section": "TJ",
"status": 1,
"task_type": "wssdkw",
"plan_start_date": "2025-11-28",
"plan_complete_date": "2029-03-08",
"actual_complete_date": None,
"complete_quantity": 29930.0,
"complete_rate": 15.22,
"contract_quantity": 196645.0,
"plan_node": [
{"date": "2025-11-28", "quantity": 0.0, "is_audit": True},
{"date": "2029-03-08", "quantity": 196645.0, "is_audit": True},
],
"statistic_date": "2026-01-29",
"is_crucial": False,
"delay_days": 0,
},
)
node.set_origin_data(
{
"id": "e9be27e9-e4aa-4eaf-8255-1fe451737227",
"project_id": "f3e02e84-e81c-4aa6-88d4-f5aa108c8227",
"contract_id": "663dfc72-d63c-42da-8853-4abcddd405f6",
"show_name": "尾水隧洞开挖(方)",
"construction_section": "TJ",
"status": 1,
"task_type": "wssdkw",
"plan_start_date": None,
"plan_complete_date": None,
"actual_complete_date": "2026-01-29",
"complete_quantity": 29930.0,
"complete_rate": 0.0,
"contract_quantity": None,
"plan_node": [],
"statistic_date": "2026-01-29",
"is_crucial": False,
"delay_days": None,
}
)
results = await handler.update_all([node])
assert len(results) == 1
assert results[0].status.value == "success"
assert called["plan"] == 1
assert "UPDATE_SCHEMA: ConstructionPlanUpdate:" in (node.sync_log or "")
assert "origin_invalid=" in (node.sync_log or "")